用 let 或 const 声明的变量的提升
虽然用 var 声明的变量在提升期间的行为符合预期,但用 let 或 const 声明的变量会表现出来不同的行为。
全部提升声明
所有 JavaScript 声明(var、let、const、function、function*、class)都会进行提升,这意味着它们在各自范围内的任何位置都可以被识别。
初始化差异
然而,var/function/function* 和 let/const/class 声明之间的区别在于它们的初始化。从作用域开始时创建绑定那一刻起,Var 声明就被初始化为 undefined。相反,let/const/class 声明在其语句被求值之前保持未初始化状态。
未初始化变量的临时死区
此未初始化状态创建了一个“临时死区” “在初始化之前访问变量会导致ReferenceError.
示例:
x = y = "global"; (function() { x; // undefined y; // Reference error: y is not defined var x = "local"; let y = "local"; }());
let 与提升中的 const
Let 和 const 在提升方面的操作相同。它们之间的区别在于,常量必须始终在声明时赋值。
结论
用 let 或 const 声明的变量会被提升,但它们在内部保持未初始化状态。暂时的死区,直到处理其声明语句。过早访问它们将导致引用错误。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3