首頁  >  文章  >  web前端  >  JavaScript中的變數宣告早於賦值

JavaScript中的變數宣告早於賦值

高洛峰
高洛峰原創
2016-11-26 09:18:431161瀏覽

如下
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中如下

JavaScript中的變數宣告早於賦值

雖然可以先使用再聲明,但這樣會造成賦值的效果丟失。如下
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);


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn