搜尋

首頁  >  問答  >  主體

javascript - 分析這段程式碼會alert什麼?

    window.val = 1;
    var json = {
        val:10,
        dbl:function(){
            this.val = 2;
        }
    };
    json.dbl();//this.val = 2      ⒈
    var dbl = json.dbl;            ⒉
    dbl();//window.val = 1;        ⒊
    json.dbl.call(window);//this指向变为window,并且执行,window.val = 1;  ⒋
    alert(window.val + json.val);//json指向为window,所以val为1,1+1=2???  ⒌

註解是我最開始的理解,然後看到了結果之後我試圖用答案去逆向思考來找原因。

==========================看過答案之後的分割線============== ============

在第⒈步之後,this仍然是dbl的,此時val為2,,到了⒉ ⒊之後,此時是直接調用的window.val = 1,然後再call改變this指向並執行,此時的this指向window,並且直接覆蓋了window下的val屬性,所以window.val為2,最後⒋步就變為了2 2=4。

不知道這樣的想法對不對,還請指教,謝謝!

phpcn_u1582phpcn_u15822776 天前590

全部回覆(2)我來回復

  • 仅有的幸福

    仅有的幸福2017-05-19 10:43:46

    json.dbl();//this.val = 2      ⒈
    var dbl = json.dbl;            ⒉
    dbl();//window.val = 2;        ⒊
    alert(window.val + json.val);//2+2  4

    dbl() 執行的時候,此時this 就是 window 對象,window.val = 2, 你的第四部是沒有必要的

    回覆
    0
  • 世界只因有你

    世界只因有你2017-05-19 10:43:46

    雷雷

    回覆
    0
  • 取消回覆