//我不明白为什么这不起作用
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();
为什么这段代码也会返回' window'它在x对象内部执行
答案 0 :(得分:1)
调用x.func()()
使用x.func
作为上下文调用函数x
,然后使用无上下文调用它返回的值。定义函数无关紧要;只是如何调用它。
为避免这种情况,您可以在返回之前将函数绑定到特定上下文:
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;
}
};