我们使用 let 或 const 代替 var,输出报错是为什么?
var a = 10;
function foo() {
console.log(a); // ??
let a = 20;
}
foo();
我们使用 let 或 const 代替 var,输出报错是为什么?
var a = 10;
function foo() {
console.log(a); // ??
let a = 20;
}
foo();
ReferenceError:a undefined。
let和const声明可以让变量在其作用域上受限于它所使用的块、语句或表达式。与var不同的是,这些变量没有被提升,并且有一个所谓的暂时死区(TDZ)。试图访问TDZ中的这些变量将引发ReferenceError,因为只有在执行到达声明时才能访问它们。
var a = 10; // 全局使用域
function foo() { // TDZ 开始
// 创建了未初始化的'a'
console.log(a); // ReferenceError
// TDZ结束,'a'仅在此处初始化,值为20
let a = 20;
}