2016-06-22 62 views
0

我目前通過一些javascript教程讀,我從這裏走來在此位的示例代碼:http://www.w3schools.com/js/js_if_else.aspif語句是否創建一個本地作用域?

if (hour < 18) { 
greeting = "Good day"; 

}

在這個例子中,問候變量不與var語句前綴。現在我查了一下這意味着什麼,我的理解是,如果沒有變量被它創建的全局範圍發現,它會導致java腳本查看更高的範圍。

那麼本教程是這樣做的,因爲if語句的塊是本地環境?如果這是否意味着,如果我有一些代碼,看起來像這樣:

if (condition){var x=10}; 
else {var x=5}; 

那麼仍然會有對我來說沒有全局變量x打電話?

回答

2

在JavaScript(ES5)中,if語句在與var聲明時不會創建本地範圍。本地作用域是通過函數創建的。

0

W3Schools在他們的代碼示例中使用不好的做法而臭名昭着,並且您已經找到了一個這樣的例子。他們正在創建一個全局範圍的變量。

塊只會爲使用新的let keyword聲明的變量創建局部作用域。如果您使用的JavaScript的舊版本,或者如果您使用的var關鍵字,則變量的作用域是最裏面的function該變量在聲明。通過var以外的任何功能的聲明

變量是範圍爲window(全球)範圍。

{ 
 
    var x = "hello world"; 
 
} 
 
document.getElementById("var-value").innerHTML = x;
<span id="var-value"></span>

在上面的代碼中,如果你有let更換var,它會因爲x是未定義產生錯誤。

{ 
 
    let x = "hello world"; 
 
} 
 
document.getElementById("var-value").innerHTML = x;
<span id="var-value"></span>

0

你就可以得到的if..else之外x的值。這是由於JavaScript具有函數範圍而不是塊。我創建了實例的的jsfiddle,可在https://jsfiddle.net/h4gjb8mt/

示例中找到:

var condition = true; 

if (condition) { 
    var x=10; 
} 
else { 
    var x=5; 
} 

console.log(x);