【问题标题】:Why(How) does value of 'this' changes when a callback is called from inside the function? [duplicate]为什么(如何)从函数内部调用回调时“this”的值会发生变化? [复制]
【发布时间】:2026-01-25 12:05:01
【问题描述】:

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

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 中的值不应该是指 obj 吗?正如它在 obj 对象上调用的那样?

【问题讨论】:

    标签: javascript callback this


    【解决方案1】:

    因为它调用了 obj 对象?

    不,不是。

    cb(output_value);
    

    cb 左侧没有任何内容,因此在默认上下文中调用它。

    【讨论】:

      【解决方案2】:

      你的回调是这样调用的:

        cb(output_value);
      

      该函数调用中没有对象上下文,因此this 的值在非严格模式下将是window(或全局上下文),在严格模式下将是undefined

      如果您想确保回调的this 值与调用它的上下文中的值相匹配,您可以使用.call()

      cb.call(this, output_value);
      

      【讨论】:

        最近更新 更多