簡體   English   中英

Javascript全局與局部范圍

[英]Javascript Global vs Local Scope

我目前正在嘗試了解Javascript在全局范圍還是局部范圍方面的有趣觀點。

我的問題是,為什么以下返回undefined

var a = 100;
function local() {
    if (false) {
        var a = 50;
    }
    alert(a);
}

另外,我運行了這個:

var a = 100;
function local() {
    alert(a);
}

結果是驚人的:100。

keyword, that we can use with Javascript? 有什么方法可以指定何時要從全局范圍獲取變量,例如可以與Javascript一起使用的PHP 關鍵字?

因為吊裝

這意味着將每個變量聲明都彈出到函數頂部,因此運行的實際代碼為:

var a = 100;
function local(){
    var a;
    if (false)
        a = 50;

    alert(a);
}

它與全局VS無關。 本地的,你只需躲在外a變量與內a變量。

有什么方法可以指定何時要從全局范圍獲取變量,例如可以與Javascript一起使用的PHP全局關鍵字?

沒有


關於注釋中的問題“如果if條件失敗(我故意這樣做),我想恢復使用全局變量,該怎么辦?”

您可以使用eval

var a = 100;
function local() {
    if (false) {
        eval('var a = 50;');
    }
    alert(a);
}

現場演示

但是你不應該!

JavaScript具有功能范圍,而不是塊范圍(與許多其他編程語言一樣)。 這意味着無論var語句出現在何處(在您的情況下,if分支甚至都沒有執行),它都會在函數的本地范圍內聲明變量a 它在全局變量中隱藏a變量,但是由於沒有賦值,因此它返回undefined

有什么方法可以指定何時要從全局范圍獲取變量,例如可以與Javascript一起使用的PHP全局關鍵字?

您可以將變量作為全局對象的屬性(瀏覽器環境中的window )進行訪問:

var a = 100; // global
function loc() {
    var a = 50;
    alert(window.a); // 100
    alert(a); // 50
}
loc();

但是,您幾乎不會使用它。 通常應避免使用全局變量,並且在名稱沖突的情況下,您應該簡單地重命名本地變量(至少出於可讀性和可維護性)。

我知道,如果使用var在函數內部定義了變量,則它將具有Local Scope

我也知道任何函數都可以輕松訪問Global變量。

當我在瀏覽器的控制台中測試以下內容時,第一個輸出是undefined

這意味着函數nwf()無法訪問全局變量nw1

這是由於參考錯誤突出顯示了嚴格模式的重要性

為了避免出現這種情況,請不要在任何函數的內部和外部重新聲明和/或初始化任何具有相同名稱的變量,就像以下情況一樣:

 var nw1 = 1; // var creates global scope outside function function nwf() { alert(nw1); var nw1 = 2; // var creates LOCAL scope inside function alert(nw1); }; nwf(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM