Heim  >  Fragen und Antworten  >  Hauptteil

javascript – Hinweise zu diesem Thema

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

Warum wird das Ergebnis des obigen Code-Ausführungsfensters angezeigt?

天蓬老师天蓬老师2670 Tage vor774

Antworte allen(5)Ich werde antworten

  • 滿天的星座

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

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

    想要的到 "obj" ,可以这样做

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

    Antwort
    0
  • 阿神

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

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

    可以按照如下替换方法:

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

    这里的self就是指向window了,所以return self.foo就是return window.foo,也就是'window'

    Antwort
    0
  • 淡淡烟草味

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

    其实最简单的理解就是obj.getFoo给了f,然后再看这方法运行的位置在哪.

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

    Antwort
    0
  • 曾经蜡笔没有小新

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

    console.log(f())中f()是独立被调用的
    1.如果调用者函数,被某一个对象所拥有,那么该函数在调用时,内部的this指向该对象。
    2.如果函数独立调用,那么该函数内部的this,则指向undefined。
    推荐阅读 http://www.jianshu.com/p/d647... 希望对你有所帮助

    Antwort
    0
  • PHP中文网

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

    函数执行,函数体内的this指向函数的调用方

    1、下面这段代码,getFoo函数的调用方是obj,所以getFoo函数内部的this指向obj对象

    var f = obj.getFoo()

    2、getFoo函数返回了一个匿名函数赋给变量f,再执行函数f,此时变量f是挂载到window上的,函数f的调用方是window,函数f内部的this也指向window

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

    Antwort
    0
  • StornierenAntwort