JavaScript中的變量聲明早於賦值


如下

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM