溫溫醬
2019-02-14 15:11:49
var aa=11; Test(); alert(aa); function Test() { var aa=33; alert(this.aa); this.aa = 22; alert(this.aa); alert(aa); } alert(new Test().aa); 我剛學(xué)JS,看上去很簡單的程序,最后的結(jié)果卻讓我糊涂,希望有朋友能不惜賜教下,給仔細解釋一下!謝謝了請別復(fù)制人家的,請解釋的更通俗易懂些。
2 回答

SMILET
TA貢獻1796條經(jīng)驗 獲得超4個贊
“通俗易懂些”說說我的理解。
js函數(shù)是一種對象。
new關(guān)鍵字可以將一個函數(shù)對象實例化為一個新的對象。
被實例化后,源對象內(nèi)的this將指向這個新的對象,否則如沒有用new實例化則this指向默認的頂層對象window。
如Test()和new Test()兩者的區(qū)別:前者僅僅執(zhí)行一次,this指向window,后者不僅執(zhí)行一次而且返回一個新的對象,實例化進行時其this指向一個空的對象(在內(nèi)存中),還沒給在個this所指對象添加aa屬性時alert(this.aa)是undefined。this.aa = 22; 給了這個對象增加了aa屬性,所以第二個alert(this.aa); 彈出22;
函數(shù)內(nèi)var aa=33; 這個aa!=this.aa,而且aa!=window.aa, 所以alert(aa) 彈出33;
最后alert(new Test().aa); (new Test())這個匿名對象已經(jīng)有了aa屬性,值為22,所以最后彈出22
添加回答
舉報
0/150
提交
取消