我知道有很多问题与此类似,但我找不到任何答案来回答当从对象函数内部调用回调函数时,该函数的上下文(值)为什么或可能如何变化像这个
var obj = {
objproperty: "this is a property of obj",
func1: function(x,cb){
console.log(this) // refers to obj
var output_value = x + 20;
cb(output_value);
}
};
obj.func1(123,function(output_value){
console.log(output_value);
console.log(this); // does this refers to window or undefined??
});
据我所知,第三个console.log中的值"this"不应该引用obj吗?就像它调用obj对象一样?
就像它调用obj对象一样?
不,不是。
cb(output_value);
cb
左侧没有任何内容,因此在默认上下文中调用它。
您的回调调用如下:
cb(output_value);
该函数调用中没有对象上下文,因此this
的值在非严格模式下将为window
(或全局上下文),在严格模式下为undefined
。
如果您想确保回调的this
值与调用它的上下文中的值相匹配,可以使用.call()
:
cb.call(this, output_value);