如下
var a = 3;
實際有兩個步驟:
1 初始化a為undefined
2 a賦值3
因此會出現一些「匪夷所思」的現象,即JS中變數可以先使用後聲明。這在Java中是不允許的。
System.out.println(a);
int a = 1;
編譯通不過。但JS可以,如下
alert(a);
var a;
雖然是undefined,但不會報錯。說明a的確聲明了,且為undefined。
如果只是“alert(a)”,沒有“var a”的話JS引擎會報錯的。
alert(a);
FF中如下
雖然可以先使用再聲明,但這樣會造成賦值的效果丟失。如下
alert(a);
var a = 1;
這次輸出的仍然是undefined而非1。
又如,
alert('a' in window); // true
var a;
雖然程式碼形式上寫在alert後,引擎仍然先自動處理var的聲明。最後輸出的是true。
明白了這些就不難理解下面的代碼運行結果了
if (!("a" in window)) {
var a = 1;
}
alert(a);