解释 `var`、`let` 和 `const` 之间的变量提升区别
主题
JavaScript
在GitHub上编辑
总结
var
声明会被提升到其作用域的顶部并使用 undefined
初始化,允许它们在其声明之前被使用。let
和 const
声明也会被提升,但不会被初始化,如果在声明之前访问它们,则会导致 ReferenceError
。const
声明在声明时还需要一个初始值。
var
、let
和 const
之间的变量提升区别
var
的变量提升
var
声明会被提升到其包含的函数或全局作用域的顶部。这意味着变量可以在整个函数或脚本中使用,即使在声明它的行之前也是如此。但是,在遇到实际声明之前,变量会被初始化为 undefined
。
console.log(a); // Output: undefinedvar a = 10;console.log(a); // Output: 10
let
的变量提升
let
声明也会被提升到其块级作用域的顶部,但它们不会被初始化。这会在块的开始到声明被遇到之间创建一个“暂时性死区”(TDZ)。在 TDZ 中访问变量会导致 ReferenceError
。
console.log(b); // ReferenceError: Cannot access 'b' before initializationlet b = 20;console.log(b); // Output: 20
const
的变量提升
const
声明在变量提升方面与 let
类似。它们被提升到其块级作用域的顶部,但未被初始化,从而导致 TDZ。此外,const
在声明时需要一个初始值,并且不能被重新赋值。
console.log(c); // ReferenceError: Cannot access 'c' before initializationconst c = 30;console.log(c); // Output: 30