如下
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);