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

為什麼我的全域變數在 JavaScript 中未定義?

Barbara Streisand
發布: 2024-12-07 17:06:12
原創
599 人瀏覽過

Why is My Global Variable Undefined in JavaScript?

對 JavaScript 中的全域變數有未定義的值感到驚訝嗎?

您是否曾經遇到 JavaScript 中全域變數意外傳回未定義值的情況?考慮這個令人困惑的例子:

var value = 10;

function test() {
    //A
    console.log(value);
    var value = 20;

    //B
    console.log(value);
}

test();
登入後複製

這段程式碼的輸出讓很多人感到驚訝:

undefined
20
登入後複製

為什麼全域變數未定義

The這個難題的根本原因在於JavaScript 的一個基本概念,稱為 變數提升。 當JavaScript 引擎解釋程式碼時,它會先掃描整個程式碼區塊並將所有變數宣告「提升」到頂部。但是,僅提升聲明,而不提升賦值。

在上面的範例中,當執行函數測試時,全域變數值在任何時候都不會被存取。相反,會宣告並指派一個新的局部變數值。這個局部變數遮蔽了全域變量,導致 A 點的 console.log(value) 呼叫出現未定義的值。

解釋

為了進一步說明這一點,讓我們重寫程式碼,就像發生了提升一樣:

// Variable declarations hoisted to the top of the function
var value = undefined;
var value = 20;

function test() {
    //A
    console.log(value);

    //B
    console.log(value);
}
登入後複製

現在,很清楚為什麼第一個console.log 呼叫返回未定義。局部變數值尚未分配。

另一個範例

為了強調提升的概念,請考慮以下程式碼:

var test = 'start';

function end() {
    test = 'end';
    var test = 'local';
}

end();
alert(test);
登入後複製

此程式碼提醒值“start”,而提醒值不是“end”或“local”。這是因為變數 test 被提升到了結束函數的頂部,遮蔽了全域變數。

函數也被提升了

提升不僅適用於變量,也適用於功能。下面的程式碼說明了這一點:

test("Won't work!");

test = function(text) { alert(text); }
登入後複製

此程式碼會引發引用錯誤,因為當呼叫 test("Won't work!") 時,測試變數已被宣告但未指派函數。只有正確的函數宣告語法才能確保完整的提升。

以上是為什麼我的全域變數在 JavaScript 中未定義?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板