javascript中this的绑定在函数被调用时动态确定,核心规则是“谁调用函数,this就指向谁”,但受默认绑定(普通调用时指向全局对象或undefined)、隐式绑定(obj.method()时指向obj)、显式绑定(call/apply/bind强制指定)和箭头函数(继承外层词法this)影响。

JavaScript 中 this 的绑定不是在函数定义时确定的,而是在函数**被调用时**,由调用方式动态决定的。核心规则是:谁调用函数,this 就指向谁(严格模式下有例外),但存在显式绑定和箭头函数等特殊情况。
默认绑定:独立调用函数
当函数以普通方式调用(不带任何对象前缀),this 指向全局对象(非严格模式下是 window 或 global;严格模式下为 undefined)。
-
注意:ES6 模块中顶层
this始终为undefined,不受严格模式影响 - 常见陷阱:把对象方法赋值给变量后再调用,会丢失原始
this
隐式绑定:通过对象属性调用
当函数作为对象的属性被调用(即 obj.method() 形式),this 指向该对象(obj)。
- 只看“调用位置左侧最近的那个对象”——
obj.foo().bar()中,bar的this是obj.foo()的返回值,不是obj - 嵌套对象也适用:
obj.inner.method()中,this是inner,不是obj
显式绑定:call、apply、bind
通过 fn.call(obj, ...args)、fn.apply(obj, argsArray) 或 const bound = fn.bind(obj),可强制指定 this 值。
-
bind返回新函数,this被永久绑定,后续再用call也无法覆盖(除非使用new) - 硬绑定函数若作为构造函数被
new调用,this会指向新实例,忽略原绑定对象
箭头函数:继承外层作用域的 this
箭头函数没有自己的 this,它会沿作用域链向上查找,使用定义时所在词法环境中的 this 值,且无法被 call/apply/bind 修改。
- 适合用于回调(如
setTimeout、事件处理器),避免this意外丢失 - 不能用作构造函数,调用
new会报错
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











