解题关键是先判断调用方式再按优先级匹配规则:默认绑定、隐式绑定、new绑定、显式绑定、箭头函数无this;警惕赋值调用、间接引用、回调丢失上下文三类陷阱;混合场景依优先级硬刚,答题用“调用链+规则匹配”清晰表述。

高效回答 JS 中 this 绑定面试题,关键不是背规则,而是建立清晰的判断路径:先看函数怎么被调用,再按优先级逐层匹配绑定规则。只要逻辑链不乱,复杂题也能一步到位。
一、快速锁定调用方式是解题起点
拿到题目第一眼,别急着想“this 是什么”,先问:这个函数到底是怎么被调用的?
-
直接写函数名加括号(如
fn())→ 默认绑定(非严格模式指向window,严格模式为undefined) -
对象点方法调用(如
obj.method())→ 隐式绑定(this指向obj) -
带
new关键字(如new Foo())→ new 绑定(this指向新实例) -
用了
call/apply/bind→ 显式绑定(优先级高于隐式,默认绑定) -
箭头函数(如
() => console.log(this))→ 没有自己的this,沿作用域链向上找外层普通函数的this
二、警惕三类高频“陷阱调用”
很多题目的干扰项就藏在看似像隐式绑定、实则已失效的写法里:
-
赋值后调用:如
const f = obj.method; f();→ 已脱离对象,回归默认绑定 -
间接引用:如
(obj.method)();或(f = obj.method)();→ 小括号不改变调用本质,仍是默认绑定 -
回调函数丢失上下文:如
setTimeout(obj.method, 100);→ 定时器内部以独立方式调用,this指向window(或undefined)
三、遇到嵌套或混合场景,按优先级硬刚
当多种绑定同时出现(比如 bind 后又 call),记住固定优先级(从高到低):
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- new 绑定(最高)→ 构造函数调用无视其他绑定
-
显式绑定(
bind/call/apply)→bind创建的函数再被call,以call为准 - 隐式绑定 → 仅在点调用且无显式/构造干预时生效
- 默认绑定(最低)→ 兜底规则
例如:const bound = fn.bind(obj1); bound.call(obj2); → 最终 this 是 obj2,因为 call 优先级高于 bind 的预设。
四、答题时用“调用链+规则匹配”代替模糊描述
面试官想听的是你的分析过程,不是结论。推荐这样组织语言:
- “
obj.method()是对象方法调用,符合隐式绑定规则,所以this指向obj” - “
setTimeout(fn, 100)中,fn被定时器作为独立函数执行,触发默认绑定,非严格模式下this是window” - “箭头函数内没有
this,它继承外层函数的this;外层是obj.method调用,所以箭头函数的this也指向obj”
不绕弯、不空谈“上下文”,直指调用动作和对应规则,既准确又显逻辑功底。

















