区别
- let 可以定义块级作用域变量
{
var i = 0
}
console.log(i) //0
{
let i = 0
}
console.log(i) //i is not defined
- let 配合for循环的独特应用
for(var i = 0; i < 5; i ++) {
setTimeout(() => {
console.log(i)
},0)
}
// 5个5
for(let i = 0; i < 5; i ++) {
setTimeout(() => {
console.log(i)
},0)
}
// 0,1,2,3,4
- let 没有变量提升和暂时性死区
console.log(a)
let a = "b"
// a is not defined
ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。
- let变量不能重复声明
let a = 0
let a = 1
//Identifier 'a' has already been declared
网友评论