javascript - 分析這段程式碼會alert什麼?
phpcn_u1582
phpcn_u1582 2017-05-19 10:41:46
0
2
545
    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_u1582
phpcn_u1582

全部回覆(2)
仅有的幸福
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, 你的第四部是沒有必要的

世界只因有你

雷雷

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!