ES6中的let命令

ES6新增了let命令,用于声明变量。其用法类似var,区别是使用let命令声明的变量只在当前代码块有效。

for循环的计数器就很适合使用let命令。

var arr= [1,2,3,4,5];
for(var i=0;i<arr.length;i++){
//something to do...
}
alert(i); //运行结果为5,但如果使用let,会报错i is not defined

下面的代码如果使用var,最后将输出10;

 var a = [];
for(var i = 0;i<10;i++){
a[i] = function(){
alert(i);
}
}
var func = a[7];
func();

这是因为变量i使用var声明,在全局范围内有效,每次循环新的i值就会覆盖旧值。

而如果使用let声明变量,i只在本次循环中有效,所以以下代码的输出结果为7。

 var a = [];
for(let i = 0;i<10;i++){
a[i] = function(){
alert(i);
}
}
var func = a[7];
func();

使用let声明变量,变量一定要在声明后使用,不然会报变量未定义的错误。

 console.log(str);
var str = "111" //undefined
// let str = "111"; //str is not defined

上面的代码如果使用var声明变量str,仅仅会输出变量undefined。而使用let命令声明,则会抛出str is not defined异常。

只要块级作用域内存在let命令,它所声明的变量就“绑定”这个区域,不再受外部的影响。ES6规定,如果区块中存在let和const命令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域,只要在声明之前使用这些变量就会报错。这在语法上称作“暂时性死区”(temporal dead zone)。

 var tmp = 123;
if(true){
tmp = "abc"; //tmp is not defined
let tmp; //将声明的变量绑定到这个区域,不再受外部影响
}

查看代码运行效果

参考阮一峰《ES6标准入门》

上一篇:使用js是想防止表单重复提交的效果


下一篇:Plyr – 简单,灵活的 HTML5 媒体播放器