ES6之 let与const

在js中,定义变量时要使用var操作符,但是var有许多的缺点,如:一个变量可以重复声明、没有块级作用域、不能限制修改等。

//缺点1:变量可以重复声明
var a=1;
var a=2;
console.log(a); //2
//缺点2:无法限制修改
//缺点3:没有块级作用域
{
    var b=12;
}
console.log(b); //12

ES6新增的let和const就解决了这些问题。下面我们来看看let和const吧。

  1. let和const都不能重复声明
    let a=1;
    let a=2;
    console.log(b); //SyntaxError: Identifier 'a' has already been declared
  2. let声明的是变量,值可以修改;const声明的是常量,不能修改
    const a=1;
    a=2;
    console.log(a); //TypeError: Assignment to constant variable.
  3. 有块级作用域
    var a=[];
    for(var i=0; i<5;i++){
        a[i] = function (){
            console.log(i);
        }
    }
    a[2](); //5

    上面这个例子中,变量i是var定义的,作用域是在全局,全局只有一个i,每一次循环,变量i的值都会+1,循环结束后,i的值为5。所有数组a的成员,a[0]...a[4]里面的i都是同一个,所以最后输出的是5。

    let a=[];
    for(let i=0; i<5;i++){
        a[i] = function (){
            console.log(i);
        }
    }
    a[2](); //2

    这个例子中,i是用let声明的,仅在块级作用域有效。数组a的每一个成员都有一个自己的i。

     另外,值得注意的是,for循环设置循环变量的那部分是父作用域,循环体内是单独的子作用域。

for(let i=0; i<2; i++){
    let i=12;
    console.log(i);
}
//12
//12

猜你喜欢

转载自www.cnblogs.com/ly2019/p/10967140.html