执行上下文和((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