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 bergunacall
Ia 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?
Panggil terus menggunakan nama fungsi Tidak kira berapa lapisan anda membalutnya, pemanggil adalah
window
.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.Maksud perkara ini tidak ditentukan apabila ia diisytiharkan tetapi ditakrifkan apabila ia dipanggil Terdapat beberapa situasi
Panggilan fungsi biasa, ini adalah objek global atau tidak ditentukan
Sebagai kaedah objek, inilah objek itu
ungkapan baharu, ini ialah objek yang baru dibuat yang diprototaip dengan fungsi ini
Gunakan permohonan/panggilan untuk menyatakan ini
Gunakan bind untuk membetulkannya
Fungsi pengendalian acara ini ialah elemen DOM semasa yang mencetuskan acara (event.currentTarget)
Saya tidak tahu sama ada ia akan membantu anda
Setakat soalan ini.
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.
arguments[0] ==> arguments.0
Array juga merupakan objek, dan [] panggilan adalah sama dengan ., jadi ini adalah argumen
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.
o.show()
的this
指向o
,但和本题无关。o.show()
中的fn
标识符解析得到一个引用类型(内部类型),其base
属性(本题中值为show()
方法的活动对象)即是this
的指向。因为活动对象返回null
,所以this
指向null
,从而指向了window
。arguments[0]()
的arguments[0]
同样返回一个引用类型,其base
属性的值为arguments
,所以this
指向arguments
。