执行上下文和((this object))

//我不明白为什么这不起作用

y = 'window';
var x = {
    y : 'x',
    func : function(){
        return function(){
            return this.y
        }
    }
};

x.func()();

// when I execute x.func()() I understand why it should return y
// x.func() would return a function in the global context and then execute it ' should return 'window' '
y = 'window'
var x = {
    y : 'x',
    func : function(){
        return function(){
            return this.y
        }()
    }
};

x.func();

为什么这段代码还会返回它在x对象内执行的'window'


调用x.func()()使用x作为上下文调用函数x.func ,然后使用no context调用返回的值。 功能定义在哪里并不重要; 只是它被称为如何。

为了避免这种情况,可以在返回之前将函数绑定到特定的上下文:

var x = {
    y: 'x',
    func: function() {
        return function() {
            return this.y;
        }.bind(this);
    }
};

ES6箭头功能也使用词法this ,相当于bind

var x = {
    y: 'x',
    func: function() {
        return () => this.y;
    }
};
链接地址: http://www.djcxy.com/p/94917.html

上一篇: execution context and (( this object ))

下一篇: can't access NavController from method