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??? ⒌
Die Kommentare stellen mein erstes Verständnis dar, und nachdem ich die Ergebnisse gesehen hatte, habe ich versucht, die Antworten zu nutzen, um rückwärts zu denken und die Gründe zu finden.
=========================Die Trennlinie nach dem Lesen der Antwort================ ==========
Nach Schritt ⒈ ist dies immer noch dbl und val ist zu diesem Zeitpunkt 2. Nach Schritt ⒉ ⒊ wird window.val = 1 direkt aufgerufen, und dann wird der Aufruf geändert und zu diesem Zeitpunkt ausgeführt zum Fenster und überschreibt direkt das val-Attribut unter dem Fenster, sodass window.val 2 ist und der letzte Schritt 2 zu 2 + 2 = 4 wird.
Ich weiß nicht, ob diese Idee richtig ist, bitte geben Sie mir einen Rat, danke!
dbl() 执行的时候,此时this 就是 window 对象,window.val = 2, 你的第四部是没有必要的