[英]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.