JS中this的绑定规则共四条:默认绑定(独立调用,非严格模式指向window,严格模式为undefined)、隐式绑定(obj.fn(),this指向点号左侧对象)、显式绑定(call/apply/bind强制指定this)、new绑定(this指向新实例);优先级为new > 显式 > 隐式 > 默认,箭头函数无this、new优先级最高是两大高频混淆点。

JS 中 this 的绑定规则其实就四条,画思维导图时抓住「谁调用、怎么调、在哪写」这三个关键维度,就能清晰分层。不用堆概念,重点标出优先级和典型陷阱。
一、默认绑定(最基础,也最容易掉坑)
函数独立调用时的 this,默认指向全局对象(浏览器是 window,严格模式下是 undefined)。
- 常见场景:直接写
foo()、回调中裸调用(如setTimeout(foo, 100))、IIFE 内部 - 注意:箭头函数不适用默认绑定——它没有自己的 this,直接沿用外层作用域的 this
二、隐式绑定(最常用,看调用位置)
函数作为对象的方法被调用,this 指向「点号左边的那个对象」。
- 例如:
obj.method()→ this 指向obj - 陷阱:赋值后调用会丢失绑定,如
const fn = obj.method; fn();→ 回到默认绑定 - 嵌套对象只看最后一层调用:
obj.inner.obj2.method()→ this 是obj2
三、显式绑定(call / apply / bind)
通过 .call()、.apply()、.bind() 强制指定 this 值。
-
fn.call(obj, a, b)和fn.apply(obj, [a, b])立即执行;fn.bind(obj)返回新函数,需再调用 - bind 绑定不可被后续 call/apply 覆盖(硬绑定),但 new 调用可覆盖(见下条)
- 注意:null / undefined 作为 this 参数时,非严格模式下会被自动替换为全局对象
四、new 绑定(构造函数调用)
用 new 调用函数时,this 指向新创建的实例对象。
- 执行顺序:创建空对象 → this 绑定该对象 → 执行构造函数 → 返回该对象(除非显式 return 非空对象)
- 优先级最高:new > 显式绑定 > 隐式绑定 > 默认绑定
- 箭头函数不能用 new 调用,会报错
思维导图主干建议按「绑定方式」分四大分支,每支下列「触发条件」「this 指向」「典型例子」「易错点」四个子节点。把「箭头函数无 this」和「new 优先级最高」加粗标红,这两个是高频混淆点。











