"if (!(""a"" in window)) { var a = 1; } alert(a); 為什么結果是undefined"


因為所有的全局變量都是window的屬性,所以語句 var a = 1;等價於window.a = 1;
所有的變量聲明都在范圍作用域的頂部
alert("a" in window);
var a;

雖然這個聲明是在alert之后,但alert彈出的依然是true,這是因為JavaScript引擎首先會掃描所有的變量聲明,然后將這些變量聲明移動到頂部,最終的代碼效果是這樣的:

var a;
alert("a" in window);
那么對於這道題,我們可以理解為:變量聲明被提前了,但變量賦值沒有,因為這行代碼包括了變量聲明和變量賦值,可以將語句拆分為如下代碼:
var a;    //聲明
a = 1;    //初始化賦值

當變量聲明和賦值在一起用的時候,JavaScript引擎會自動將它分為兩部以便將變量聲明提前,不將賦值的步驟提前是因為他有可能影響代碼執行出不可預期的結果

所以,知道了這些概念以后,重新回頭看一下題目的代碼,其實就等價於:
var a;
if (!("a" in window)) {
    a = 1;
}
alert(a);

那么題目的意思就是:首先聲明a,然后判斷a是否在存在,如果不存在就賦值為1,很明顯a永遠在window里存在,這個賦值語 句永遠不會執行,所以結果是undefined


免責聲明!

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



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