JavaScript中this绑定优先级顺序为:1. new绑定(最高),2. 显式绑定(call/apply/bind),3. 隐式绑定(对象方法调用),4. 默认绑定(独立调用)。引擎按此顺序逐级匹配,一旦满足即停止判断。

JavaScript 中 this 的绑定优先级不是随意排列的,而是严格按调用方式决定的执行顺序。关键在于:函数真正运行时,引擎会依次检查是否满足更高优先级的绑定条件,一旦匹配就停止判断。
new 绑定最高:构造函数调用
当函数通过 new 关键字调用时,this 指向新创建的实例对象,其他所有绑定规则都被忽略。
- 即使该函数已用 bind 预绑定过对象,new 调用仍会覆盖它
- 箭头函数不能被 new 调用,所以不参与此规则
显式绑定次之:call / apply / bind
当函数通过 call、apply 或 bind 显式指定 this 值时,该值会被采用(除非遇到 new 绑定)。
- bind 返回的新函数,其 this 被永久锁定,后续 call/apply 无法再改写(但 new 可以覆盖)
- 普通函数调用中使用 call/apply,会立即生效并覆盖隐式或默认绑定
隐式绑定再次:对象方法调用
当函数作为对象的属性被调用(如 obj.method()),this 指向该直接调用者对象。
- 只看“点号左边”的最近一层对象,比如 a.b.c.fn() 中 this 指向 c
- 一旦赋值给变量或传入回调(如 setTimeout(obj.fn, 100)),隐式绑定就丢失,退回到默认绑定
默认绑定垫底:独立函数调用
当以上三条都不满足,函数以最简单的方式调用(如 fn()),就触发默认绑定。
- 非严格模式下 this 指向全局对象(浏览器是 window)
- 严格模式下 this 是 undefined,不会自动挂载到全局
这个顺序不是记忆负担,而是函数执行时的真实判定流程:从最特殊的调用方式(new)开始筛查,逐步回落到最普通的调用方式(独立调用)。只要理解每种调用形式对应的实际代码写法,优先级自然就清晰了。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











