您在函數中遇到的全域變數最初未定義的行為可以歸因於JavaScript 的變數提昇機制。 JavaScript 會自動將變數宣告提升到其封閉範圍的頂部,即使實際的值分配發生在程式碼的後面。
在提供的範例中,全域變數值宣告時初始值為 10。然而,在測試函數中,也聲明了一個具有相同名稱(值)的局部變量,但沒有分配值(預設為未定義)。
函數中的第一個 console.log 語句嘗試存取全域值,但由於本地值已經提升,因此它優先。結果,第一次呼叫列印出 undefined。隨後,函數中的第二個 console.log 語句顯示指派給本地值變數 (20) 的值。
這種提升現象適用於目前執行上下文中的變數和函數。重要的是要理解只有聲明被提升,而不是賦值被提升。這意味著變數可以在其整個範圍內訪問,但在程式碼到達賦值語句之前它們可能沒有分配的值。
例如,考慮以下程式碼片段:
令人驚訝的是,儘管函數 end 似乎改變了測試變數的值,但這段程式碼仍會列印 start。這是因為在 end 函數中,新的局部變數宣告優先,全域變數保持不變。
雖然變數提升可以簡化程式碼,但重要的是要了解其意義以避免意外行為。正確界定變數範圍並充分瞭解提升機制有助於維護程式碼結構並防止潛在錯誤。
以上是為什麼我的全域變數在 JavaScript 函數內未定義?的詳細內容。更多資訊請關注PHP中文網其他相關文章!