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??? ⒌
Les commentaires sont ma première compréhension, puis après avoir vu les résultats, j'ai essayé d'utiliser les réponses pour réfléchir en arrière et trouver les raisons.
==========================La ligne de démarcation après avoir lu la réponse================ ==========
Après l'étape ⒈, c'est toujours dbl, et val est 2 à ce moment. Après l'étape ⒉ ⒊, window.val = 1 est directement appelé, puis call change le point de this et l'exécute à ce moment, this Points. à window et écrase directement l'attribut val sous window, donc window.val vaut 2 et la dernière étape 2 devient 2+2=4.
Je ne sais pas si cette idée est correcte, donnez-moi quelques conseils, merci !
Lorsque dbl() est exécuté, c'est l'objet window, window.val = 2, votre quatrième partie est inutile