You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么JavaScript中两种函数调用场景下this的指向不一致?

JavaScript 不同调用方式下 this 指向差异的原因

JavaScript 中普通函数的 this 指向并非在函数定义阶段确定,而是由函数运行时的调用方式动态决定,你遇到的两种场景对应了两种不同的 this 隐式绑定规则:

  • 调用 obj.one() 时:函数是作为对象的方法被触发,此时 this 会自动绑定到调用该方法的对象 obj 上。obj 本身存在 two 方法,因此可以正常执行输出 two。
  • 调用 oneFunc() 时:执行 let oneFunc = obj.one 这步操作时,你只是把 obj.one 对应的函数体引用赋值给了独立变量 oneFunc,此时 oneFunc 和 obj 已经没有关联。直接调用独立的普通函数时,非严格模式下 this 会默认绑定到全局对象(浏览器端为 window,Node.js 端为 globalThis),全局对象上没有定义 two 方法,因此会抛出类型错误。

补充:如果在严格模式下执行 oneFunc(),独立调用的普通函数 this 会被赋值为 undefined,报错信息会变为 Cannot read properties of undefined (reading 'two')。

如果需要让独立调用的 oneFunc 也能正常访问到 obj 上的方法,可以通过 bind 显式绑定 this:

let oneFunc = obj.one.bind(obj);
oneFunc(); // 正常输出 two

内容的提问来源于stack exchange,提问作者Lee Morgan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 23:15:05