ES6中的let,用來定義塊作用域變量。
它具有以下特征:
(1)let的作用域是所在的塊,而var的作用域是所在的函數(shù)。
var a=1;
{
let a=2;
console.log(a); //2
}
console.log(a); //1
(2)同一塊中l(wèi)et兩次定義,會報錯。同作用域中var兩次定義,不會報錯。
一個let一個var也會報錯
{
let a;
let a;
}
//Uncaught SyntaxError: Identifier 'a' has already been declared
{
let a;
var a;
}
//Uncaught SyntaxError: Identifier 'a' has already been declared
(3)在頂級作用域中,let與var一樣。
但是重復定義也會報錯:兩個let,或者一個let一個var,都會報錯
(4)var變量會提升,而let變量不會提升。
(function(){
//undefined
console.log(a);
//ReferenceError: can't access lexical declaration `b' before initialization
console.log(b);
var a=1;
let b=1;
}());
(5)for語句條件中的let作用域是for語句塊。var作用域是外層函數(shù)體。
for (let i = 0; i<2; i++) {
console.log(i); // 0, 1, 2
}
console.log(i); //ReferenceError: i is not defined