JavaScript沒有塊級做用域。在其餘語言上,好比C語言中,有花括號封閉的代碼塊都有本身的做用域,(若是用ECMAScript的話來說,就是他們本身的執行環境),於是支持根據條件來定義變量。例如,下面的代碼效果函數
if (true) {ip
var color = "blue";作用域
}for循環
alert(color);//blue變量
這裏是一個if語句中定義了一個變量color,若是是在C,C++或者Java中,color會在if執行後被銷燬。可是在JavaScript中,if語句中的變量聲明會將變量添加到當前的執行環境(這裏是全局環境)中。在使用for語句時尤爲要牢記這個差別。例如循環
for (var i =0; i < 10; i++) {語言
doSomething(i);co
}
alert(i); // 10
對於有塊級做用域的語言來講,for語句初始化變量的表達式所定義的變量,只會存在於循環的環境中。而對於JavaScript來講,for語句建立的變量i即便在for循環執行結束以後,依舊存在於循環外部的執行環境之中。
1.聲明變量
使用var聲明變量會自動被添加到最近的環境之中。在函數內部,最接近的環境就是函數的局部環境;若是沒有使用var,則變量會被自動添加到全局環境中。