var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function() {
console.log(i);
};
}
a[6]();//输出10
而
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function() {
console.log(i);
};
}
a[6]();//输出6
---------------
for (let i = 0; i < 3; i++) {
console.log(i);//ReferenceError 报错let i = 'abc';
}
因为,只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。