var、let、const 区别

135 阅读2分钟

var、let、const 区别

var、let -声明变量

二者的区别:

  1. 重复声明
  • var可重复声明同一个变量,后声明的值覆盖前一个值;
  • let不可重复声明同一变量,重复则报错.
    ( let 和 var一起声明同一变量也不可以,即只要使用let声明变量,该变量就不能声明第二次)

2.块级作用域

var在块级区域以外可以被访问,而let存在块级作用域,仅在所声明的块级区域有效。

3.变量提升

  • var声明具有变量提升能力,无论在哪声明,均作为顶部声明(全局有效);
  • let声明不具变量提升能力,只在其声明所在块级作用域内有效。

4.暂存性死区

使用let声明,在声明之前的区域将为死区,必须按照规范让声明在前。

//重复声明
//  var
var val=10;
var val=200;
console.log(val); //200
//  let
let val=10;
let val=200;
console.log(val); //错误,已声明
//  同时
let val=10;
var val=200;
console.log(val);//错误,已声明
/    同时
let val=10;
var val=200;
console.log(val);//错误,已声明

// 块级区域
{
    var a=10;
    let b=20;
    console.log(a); //10
    console.log(b); //20
}
console.log(a); //10
console.log(b); //引用错误  b is not defined
在循环中分别使用var let
// var 是作用于全局的,如果后续再使用就会引起干扰

    for (var i = 0; i < 3; i++) {
         console.log(i); //0 1 2
    }
    console.log(i); //3
// let 只在循环内有效,循环作为作用域,在循环外是获取不到的,可以防止干扰

    for (let i = 0; i < 3; i++) {
        console.log(i); //0 1 2
    }
    console.log(i); //错误
遍历数组
// var
    var arr=[];
        for (var i = 0; i < 3; i++) {
            arr[i]=function(){
            console.log(i);
        }
    }
    arr[1](); //无论设置多少,均为3

// let
    for (let i = 0; i < 3; i++) {
        arr[i]=function(){
            console.log(i);
        }
    }
    arr[2](); //可设置索引得到需要的值
    

const -声明常量

  1. const声明只读常量,即值不可以更改,改变会报错;
  2. const必须声明的同时进行赋值,否则会报错;
  3. 声明的常量无法提升,有暂存死区。
//值改变
const A=10;
A=100;
console.log(A);//Assignment to constant variable

//未初始
const A;
A=10;
console.log(A);//Missing initializer in const declaration

//无法提升,有暂存死区
console.log(A); //Cannot access 'A' before initialization
const A=10;