1、let命令和var一样,作用是声明一个变量。
- var关键字
- var作用域是函数级
- var存在变量提升,即可以先使用再定义,
let关键字:
- let作用域是代码块(花括号级的作用)
- let不存在变量提升,即要先定义再使用
let不可以重复声明
<script>
console.log(a); //undefined
var a='a';
var a='aa';
console.log(a); //aa
console.log(b); //error Cannot access 'b' before initialization
let b = 'b';
let b = 'bb'; //error Identifier 'b' has already been declared
</script>
<script>
var a = 'a';
let b = 'b';
{
var c = 'c';
let d = 'd';
console.log(a); //a
console.log(b); //b
}
console.log(c); //c
console.log(d); //error: d is not defined
</script>
2、let应用场景
在for循环中定义变量用let就很合适,如下:
<script>
for(let i=0;i<10;i++){
console.log(i);
}
//这里依然可以用变量i,而不需要用j来防止变量冲突
for(let i=0;i<10;i++){
console.log(i);
}
</script>
3、let与var在循环中的不同
<script>
var a = [];
for(var i=0;i<10;i++){
a[i] = ()=>{
console.log(i);
}
}
console.log(a[6]()); //输出10
var b = [];
for(let i=0;i<10;i++){
b[i] = ()=>{
console.log(i);
}
}
console.log(b[6]()); //输出6
</script>