首頁 >web前端 >js教程 >為什麼我的全域 JavaScript 變數在函數內顯示為未定義?

為什麼我的全域 JavaScript 變數在函數內顯示為未定義?

Barbara Streisand
Barbara Streisand原創
2024-12-09 08:27:07831瀏覽

Why Does My Global JavaScript Variable Appear Undefined Inside a Function?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn