JS的this真是好難理解啊,求高手指點

來源:互聯網
上載者:User

百度的前端面試題,代碼如下:

var a=5;
function test(){
    a=0;
    alert(a);
    alert(this.a);
    var a;
    alert(a);
}
test();
new test();

在Chrome上run了一下,結果是

0
5
0
0
undefined
0

前三個結果好說,但對於第五個結果undefined我很疑惑,關鍵的就是這一句:

alert(this.a);

我的理解是,當運行到new test()這一句的時候,this指向了test,那麼this.a應該就是

a=0;

這一句裡面的0啊!為什麼是undefined呢?求解答啊求解答!

--------------------------------分割線--------------------------------------

在調試過程中我發現的幾點:

原始碼如下

運行test()之前,this指向DOMWindow對象:

運行test()之時(斷點位於test()內部),this仍然指向DOMWindow對象,輸出一次為0,5,0。

運行new test()之時(斷點位於test()內部),this指向了一個test對象,但是這個對象沒用任何屬性或成員:

輸出依次為0,undefined,0

 

有的大哥說在test裡面寫

function test(){    a=0;}

並不代表給test對象加了一個a屬性,a只是一個局部變數,是這樣嗎?

那麼如何給test加屬性呢?(使得第二次輸出為0,0,0而不是0,undefined,0呢)

才疏學淺,還望賜教!

--------------------------------分割線2--------------------------------------

有的大哥建議說把

a = 0;

改為

this.a=0;

運行結果是:

undefined
0
undefined
 
undefined
0
undefined

應該說這個結果還是可以理解的。

看來this.a和a確實不一樣啊。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.