JavaScript 變數提升:探索未定義的全域值
本文探討了JavaScript 中全域變數的令人驚訝的行為,特別是當它們似乎具有函數內未定義的值時。
Case:
在下面的範例中,全域變數值被初始化為 10。但是,當在測試函數中存取它時,它會記錄 undefined。
var value = 10; function test() { //A console.log(value); var value = 20; //B console.log(value); } test();
輸出:
undefined 20
吊裝JavaScript:
這種行為背後的現象稱為 JavaScript 變數提升。它規定函數內聲明的所有變數都被「提升」或移動到函數作用域的頂部,即使它們是在使用後聲明的。
在上面的範例中,值變數被提升到測試功能的頂端。但是,僅解除其聲明,而不解除其賦值(初始化)。因此,當呼叫 console.log(value) 時,它會存取已提升但未指派的變量,從而導致未定義。
說明:
此行為可以透過以下方式理解等效程式碼:
var value; // Global function test() { console.log(value); // Accessing the hoisted but undefined value value = 20; // Local assignment console.log(value); // Accessing the locally assigned value }
附註:提升函數:
提升也適用於函數宣告。如果函數在宣告之前被調用,它仍然會執行,即使它還沒有被指派給它的標識符。
例如:
test("Won't work!"); // Error test = function(text) { alert(text); }; // Function assignment
第一次呼叫 test失敗是因為此時尚未宣告該函數。然而,第二次呼叫會成功,因為函數在第一次呼叫後被提升並賦值。
結論:
JavaScript 的提升機制可能會導致意外結果,尤其是在存取時函數內的全域變數。了解提升的細微差別對於編寫健全且無錯誤的 JavaScript 程式碼至關重要。
以上是為什麼我的全域 JavaScript 變數在函數內顯示為未定義?的詳細內容。更多資訊請關注PHP中文網其他相關文章!