用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