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