1、let命令:用法类似于var,但是所声明的变量,只在let命令所在的代码块有效。
例: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
这样子看来就是let是每次循环都是一个新的变量,而var 是全局变量每一次循环变量i的值都会改变;
for循环的特殊之处就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域;
let 命令不存在变量提升,我们很多时候使用var的时候是,先使用在声明,用为var存在提升变量,var,function声明的全局变量,属于顶层对象的属性,而es6 新出的4中命令(let,const,class,import)声明的全局变量,不属于顶层对象的属性。所以使用,let,const需要先声明在使用。
暂时性死区:
只要块级作用域内存在let命令,它所声明的变量就“绑定这个区域”,不在受外部的影响,(就是闭关锁国了谁也不例了,你进不来的)。
不允许重复声明:let 不允许在相同的域内重复声明同一个变量
块级作用域:
ES6允许块级作用域的任意嵌套:{{{{{let insane="Hello World"}}}}}