Rumah  >  Soal Jawab  >  teks badan

javascript - Menunjukkan isu tentang ini

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?

天蓬老师天蓬老师2670 hari yang lalu775

membalas semua(5)saya akan balas

  • 滿天的星座

    滿天的星座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());

    balas
    0
  • 阿神

    阿神2017-06-28 09:27:33

    Sebab, dalam f()实际运行的地方,thiswindow,由于没有通过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'.

    balas
    0
  • 淡淡烟草味

    淡淡烟草味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
        }
    }

    balas
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新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

    balas
    0
  • PHP中文网

    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

    balas
    0
  • Batalbalas