基本用法
ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
<script>
{
var a = 10;
let b = 20;
}
document.write(a);
document.write(b); //b is not defined
</script>
for循环的计数器,就很合适使用let命令。
<script>
for(var i = 0 ;i< 10;i++)
{
console.log(i)
}
console.log(i) //10
for(let j = 0 ;j< 10;j++)
{
console.log(j)
}
console.log(j) // j is not defined
</script>
下面的代码如果使用var,最后输出的是10。
<script>
var a=[];
for(var i=0;i<10;i++)
{
a[i]=function(){
console.log(i)
}
}
a[6]() //10
</script>
如果使用let,声明的变量仅在块级作用域内有效,最后输出的是 6。
<script>
var a = [];
for(let j=0;j<10;j++){
a[j]=function(){
console.log(j)
}
}
a[6]() //6
</script>
另外,for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。
<script>
for(let i = 0; i<3;i++)
{
let i= 'abc';
console.log(i) //输出3次abc
};
for(var j = 0;j<3;j++)
{
var j= 'cbd';
console.log(j) //输出1次cbd
}
</script>
不存在变量提升
var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。
<script>
console.log(oVar); //undefined
var oVar = 123;
console.log(OLet); //Uncaught ReferenceError OLet is not defined
let oLet = 456;
</script>
