Maison  >  Questions et réponses  >  le corps du texte

javascript - Signaler des problèmes à ce sujet

var foo = "window";
var obj = {
    foo : "obj",
    getFoo : function(){
        return function(){
            return this.foo;
        };
    }
};
var f = obj.getFoo();
console.log(f());  //结果:window

Pourquoi le résultat de la fenêtre d'exécution du code ci-dessus ?

天蓬老师天蓬老师2670 Il y a quelques jours769

répondre à tous(5)je répondrai

  • 滿天的星座

    滿天的星座2017-06-28 09:27:33

    obj.getFoo() 返回一个方程,赋值给了 f 。
    f 通过 f() 被调用,没有明确的调用者,所以 this 就是 window .

    Si vous voulez obtenir "obj", vous pouvez le faire

    var foo = "window";
    var obj = {
        foo : "obj",
        getFoo : function(){
            var self = this;
            return function(){
                return self.foo;
            };
        }
    };
    
    var f = obj.getFoo();
    console.log(f());

    répondre
    0
  • 阿神

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

    Parce que, en f()实际运行的地方,thiswindow,由于没有通过call或者bind改变上下文,所以输出的就是window.

    Vous pouvez le remplacer comme suit :

    console.log(f());
    // ----->
    console.log(obj.getFoo());
    // ----->
    console.log(function() {
        var self = this;
        return function() {
            return self.foo
        }
    });

    iciself就是指向window了,所以return self.foo就是return window.foo,也就是'window'.

    répondre
    0
  • 淡淡烟草味

    淡淡烟草味2017-06-28 09:27:33

    En fait, la compréhension la plus simple est que obj.getFoo donne f, puis regarde où cette méthode s'exécute.

    f = function () {
        return function () {
            return this.foo
        }
    }

    répondre
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-28 09:27:33

    f() dans console.log(f()) est appelé indépendamment
    1 Si la fonction appelante appartient à un objet, alors lorsque la fonction est appelée, l'interne this pointe vers l'objet.
    2. Si la fonction est appelée indépendamment, alors celle-ci à l'intérieur de la fonction pointe vers indéfini.
    Lecture recommandée http://www.jianshu.com/p/d647... J'espère que cela vous sera utile

    répondre
    0
  • PHP中文网

    PHP中文网2017-06-28 09:27:33

    Exécution de la fonction, ceci dans le corps de la fonction pointe vers l'appelant de la fonction

    1. Dans le code suivant, l'appelant de la fonction getFoo est obj, donc ceci à l'intérieur de la fonction getFoo pointe vers l'objet obj

    var f = obj.getFoo()

    2. La fonction getFoo renvoie une fonction anonyme et l'affecte à la variable f, puis exécute la fonction f A ce moment, la variable f est montée sur la fenêtre, et ce. à l'intérieur de la fonction f pointe également vers la fenêtre

    console.log(f());  //结果:window

    répondre
    0
  • Annulerrépondre