###一、let 基本用法 ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。 例如: 用 let 声明一个变量
{
let a = 100 ;
var b = 200 ;
}
console.log(a); // Error
console.log(b) ;
在控制台输出,a 会 会提示错误,因为let a 只定义在 {}中,在“{}里面才有效果。 ###二、let 不存在变量的提升 首先,先搞明白js的变量提升,其实在上面的例子里面,已经有所体现,log(a),这时候的 a 是属于全局变量,先当与从局部变量提升到了全局变量。 另外一个例子:
//ES5
console.log("ES5:");
var a = [];
for (var i = 0; i < 10; i++) {
var c = i;
a[i] = function () {
console.log(c);
};
};
a[5](); //9
为什么是9呢?因为到了 i = 9 的时候才跳出循环。
测试, 修改a[5]();中 5 的值,看看输出是多少,实践证明,输出还是 9 。
现在看看 let 情况:
//ES6
console.log("ES6:");
var b = [];
for (var j = 0; j < 10; j++) {
let d = j; //关键点
console.log("---"+d);
b[j] = function () {
console.log(d);
};
};
b[5](); //5
代码关键 let d = j; 现在修改调用 b[5](); 中的 5的值。看是不是你修改的值。