Rumah > Soal Jawab > teks badan
var foo = "window";
var obj = {
foo : "obj",
getFoo : function(){
return function(){
return this.foo;
};
}
};
var f = obj.getFoo();
console.log(f()); //结果:window
Mengapa keputusan kod di atas berjalan tetingkap?
滿天的星座2017-06-28 09:27:33
obj.getFoo()
返回一个方程,赋值给了 f 。
f 通过 f()
被调用,没有明确的调用者,所以 this 就是 window
.
Kalau nak dapatkan "obj", boleh buat ni
var foo = "window";
var obj = {
foo : "obj",
getFoo : function(){
var self = this;
return function(){
return self.foo;
};
}
};
var f = obj.getFoo();
console.log(f());
阿神2017-06-28 09:27:33
Sebab, dalam f()
实际运行的地方,this
是window
,由于没有通过call
或者bind
改变上下文,所以输出的就是window
.
Anda boleh menggantikannya seperti berikut:
console.log(f());
// ----->
console.log(obj.getFoo());
// ----->
console.log(function() {
var self = this;
return function() {
return self.foo
}
});
Di siniself
就是指向window
了,所以return self.foo
就是return window.foo
,也就是'window'
.
淡淡烟草味2017-06-28 09:27:33
Malah, pemahaman yang paling mudah ialah obj.getFoo memberikan f, dan kemudian melihat di mana kaedah ini dijalankan.
f = function () {
return function () {
return this.foo
}
}
曾经蜡笔没有小新2017-06-28 09:27:33
f() dalam console.log(f()) dipanggil secara bebas
1 Jika fungsi pemanggil dimiliki oleh objek, maka apabila fungsi dipanggil, dalaman ini menghala ke objek.
2 Jika fungsi dipanggil secara bebas, maka ini di dalam fungsi menghala ke tidak ditentukan.
Bacaan yang disyorkan http://www.jianshu.com/p/d647... Saya harap ia akan membantu anda
PHP中文网2017-06-28 09:27:33
Pelaksanaan fungsi, ini dalam badan fungsi menunjuk kepada pemanggil fungsi
1. Dalam kod berikut, pemanggil fungsi getFoo ialah obj, jadi ini di dalam fungsi getFoo menghala ke objek obj
var f = obj.getFoo()
2. Fungsi getFoo mengembalikan fungsi tanpa nama dan menetapkannya kepada pembolehubah f, dan kemudian melaksanakan fungsi f Pada masa ini, pembolehubah f dipasang pada tetingkap, dan ini di dalam fungsi f juga menunjuk ke tetingkap
console.log(f()); //结果:window