为什么(如何)当从函数内部调用回调时,'this'的值会发生变化?



我知道有很多问题与此类似,但我找不到任何答案来回答当从对象函数内部调用回调函数时,该函数的上下文(值)为什么或可能如何变化像这个

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);

最新更新