cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Soalan tentang ini dalam Js

var length = 10;

function cl() {
    console.log(this.length);
}

var o = {
    length: 20,
    show: function (fn) {
        fn();
        arguments[0]();
    }
}

o.show(cl); // 10 

Berkenaan soalan ini, saya ingin tahu adakah ini dalam js tidak menunjuk kepada sesiapa yang memanggilnya? Mengapa ini dalam cl masih menunjuk ke tetingkap dan bukannya objek o apabila dipanggil buat kali pertama? Saya tahu ia tidak bergunacallIa mungkin salah, tetapi mengapa ia salah?
Mengapa yang kedua menunjukkan perbalahan?

Pada masa yang sama, mengapakah output pertama kod ini apabila berjalan dalam nodejs tidak dijemur?

为情所困为情所困2703 hari yang lalu968

membalas semua(5)saya akan balas

  • 巴扎黑

    巴扎黑2017-07-05 10:39:50

    1. Panggil terus menggunakan nama fungsi Tidak kira berapa lapisan anda membalutnya, pemanggil adalah window.

    2. Oleh kerana pengendali kurungan segi empat sama, operator kurungan segi empat adalah operasi nilai objek, dalam erti kata ia boleh sama dengan titik .运算符的,所以这里在形式上其实可以类比成arguments.0(),你看,这不就是arguments来调用了这个函数了嘛,所以运行的时候this menunjuk kepadanya.

    balas
    0
  • 欧阳克

    欧阳克2017-07-05 10:39:50

    Maksud perkara ini tidak ditentukan apabila ia diisytiharkan tetapi ditakrifkan apabila ia dipanggil Terdapat beberapa situasi

    1. Panggilan fungsi biasa, ini adalah objek global atau tidak ditentukan

    2. Sebagai kaedah objek, inilah objek itu

    3. ungkapan baharu, ini ialah objek yang baru dibuat yang diprototaip dengan fungsi ini

    4. Gunakan permohonan/panggilan untuk menyatakan ini

    5. Gunakan bind untuk membetulkannya

    6. Fungsi pengendalian acara ini ialah elemen DOM semasa yang mencetuskan acara (event.currentTarget)

    Saya tidak tahu sama ada ia akan membantu anda

    balas
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-07-05 10:39:50

    Setakat soalan ini.

    1. o.show() dilaksanakan, maka ini digunakan dalam skop fungsi show menunjuk ke o.
      Tetapi sebenarnya, fn() dipanggil di dalam, fn tidak dipanggil oleh o, tiada o.fn... Prinsip yang agak rendah ialah sesiapa yang berada di hadapan titik panggilan fungsi akan menjadi ini dalam fungsi tersebut. Ini mestilah tetingkap lalai.

    2. arguments[0] ==> arguments.0
      Array juga merupakan objek, dan [] panggilan adalah sama dengan ., jadi ini adalah argumen

    3. Mengenai nod, kerana ia adalah modular, ini menunjukkan kepada global, dan apabila var diisytiharkan, tiada panggilan tetingkap seperti dalam penyemak imbas. Tiada mekanisme sedemikian dalam nod.

    balas
    0
  • 巴扎黑

    巴扎黑2017-07-05 10:39:50

    o.show(cl) ==>相当于 
    o.show(function(){
    console.log(this)  //windows
    });

    balas
    0
  • 我想大声告诉你

    我想大声告诉你2017-07-05 10:39:50

    o.show()this指向o,但和本题无关。
    o.show()中的fn标识符解析得到一个引用类型(内部类型),其base属性(本题中值为show()方法的活动对象)即是this的指向。因为活动对象返回null,所以this指向null,从而指向了window
    arguments[0]()arguments[0]同样返回一个引用类型,其base属性的值为arguments,所以this指向arguments

    balas
    0
  • Batalbalas