Heim > Fragen und Antworten > Hauptteil
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!
仅有的幸福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, 你的第四部是没有必要的
世界只因有你2017-05-19 10:43:46
window.val = 1;
var json = {
val:10,
dbl:function(){
this.val = 2;
}
};
json.dbl();//这一步,通过json调用dbl方法,把json里面的val值改为2
var dbl = json.dbl;//这步,把dbl函数赋值给dbl
dbl();//直接调用dbl函数,函数里面的this指向window,所以把Window.val的值也改为2
json.dbl.call(window);//跟上一句一样,再一次把window.val的值改为2
alert(window.val + json.val);//经过上面的修改,window的val为2,json里面的val为2,所以弹出:2 + 2 = 4