javascript - Qu'est-ce qui vous alertera si vous analysez ce code?
phpcn_u1582
phpcn_u1582 2017-05-19 10:41:46
0
2
582
    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 !

phpcn_u1582
phpcn_u1582

répondre à tous(2)
仅有的幸福
json.dbl();//this.val = 2      ⒈
var dbl = json.dbl;            ⒉
dbl();//window.val = 2;        ⒊
alert(window.val + json.val);//2+2  4

Lorsque dbl() est exécuté, c'est l'objet window, window.val = 2, votre quatrième partie est inutile

世界只因有你
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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal