cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Apa yang akan memberi amaran jika anda menganalisis kod ini?

    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???  ⒌

Komen adalah pemahaman awal saya, dan selepas melihat hasilnya, saya cuba menggunakan jawapan untuk berfikir ke belakang untuk mencari sebabnya.

==========================Barisan pemisah selepas membaca jawapan ================== ==========

Selepas langkah ⒈, ini masih dbl, dan val ialah 2 pada masa ini Selepas langkah ⒉ ⒊, window.val = 1 dipanggil terus, dan kemudian panggilan menukar titik ini dan melaksanakannya ke tetingkap, dan secara langsung menimpa atribut val di bawah tetingkap, jadi window.val ialah 2, dan langkah terakhir 2 menjadi 2+2=4.

Saya tidak tahu sama ada idea ini betul, tolong beri saya nasihat, terima kasih!

phpcn_u1582phpcn_u15822776 hari yang lalu589

membalas semua(2)saya akan balas

  • 仅有的幸福

    仅有的幸福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

    Apabila dbl() dilaksanakan, ini ialah objek tetingkap, window.val = 2, bahagian keempat anda tidak diperlukan

    balas
    0
  • 世界只因有你

    世界只因有你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

    balas
    0
  • Batalbalas