重学ES6(1) let 和 const

107 阅读1分钟

let 和 const

块级声明用于声明在指定块的作用域之外无法访问的变量。

let 和 const 都是块级声明的一种。

再来说下 let 和 const 的区别:

const 用于声明常量,其值一旦被设定不能再被修改,否则会报错。

值得一提的是:const 声明不允许修改绑定,但允许修改值。这意味着当用 const 声明对象时:

const data = {
    value: 1
}

// 没有问题
data.value = 2;
data.num = 3;

// 报错
data = {}; // Uncaught TypeError: Assignment to constant variable.

循环中的块级作用域

var funcs = [];
for (var i = 0; i < 3; i++) {
    funcs[i] = function () {
        console.log(i);
    };
}
funcs[0](); // 3

一个老生常谈的面试题,解决方案如下:

var funcs = []; for (var i = 0; i < 3; i++) { funcs[i] = (function(i){ return function() { console.log(i); } }(i)) } funcs[0](); // 0

ES6 的 let 为这个问题提供了新的解决方法:

var funcs = []; for (let i = 0; i < 3; i++) { funcs[i] = function () { console.log(i); }; } funcs[0](); // 0