JavaScript中this执行时绑定,取决于调用方式;四条绑定规则优先级为new>显式>隐式>默认,箭头函数不参与绑定、继承外层词法this。

JavaScript 中的 this 不是定义时绑定,而是执行时绑定,它的值完全取决于函数如何被调用,而非如何被声明。理解 this 的核心在于掌握四条绑定规则(默认、隐式、显式、new),并清楚它们的优先级顺序。
隐式绑定:谁调用,this 就指向谁
当函数作为对象的方法被调用时,this 自动绑定到该对象。这是最常见也最容易识别的场景。
- 形式:
obj.method()→this指向obj - 注意“调用位置”:只看点号(
.)左边的对象;嵌套调用中,只有最后一层生效 - 陷阱:把方法赋值给变量后单独调用,会丢失隐式绑定(如
const fn = obj.method; fn();→ this 指向全局或 undefined)
显式绑定:call、apply、bind 强制指定 this
通过 call()、apply() 或 bind() 可以手动将函数的 this 绑定到指定对象。
-
fn.call(obj, a, b)和fn.apply(obj, [a, b])立即执行,仅一次生效 -
const boundFn = fn.bind(obj)返回新函数,永久绑定 this(硬绑定),无法被后续 call/apply 覆盖 - 箭头函数不支持显式绑定(它没有自己的 this,继承外层作用域)
new 绑定:构造函数调用时 this 指向新对象
使用 new 调用函数时,会自动创建一个新对象,并将 this 绑定到该对象,同时该对象原型指向构造函数的 prototype。
立即学习“Java免费学习笔记(深入)”;
- 触发条件:必须是 new + 构造函数调用(首字母大写只是约定,非强制)
- 执行过程:创建空对象 → this 绑定 → 执行函数体 → 若无显式返回对象,则返回 this
- 优先级高于隐式和显式绑定(但低于箭头函数的词法 this)
默认绑定:独立调用时的兜底规则
当函数以普通方式调用(既非对象方法、也未用 call/apply/bind、也没用 new),this 会落到默认绑定上。
- 非严格模式下:this 指向全局对象(浏览器为 window,Node.js 为 global)
- 严格模式下:this 为 undefined(更安全,避免意外污染全局)
- 箭头函数不适用此规则——它根本没有 this,直接沿用外层函数作用域的 this 值
四条规则按优先级从高到低为:new 绑定 > 显式绑定 > 隐式绑定 > 默认绑定。箭头函数是特例,它不参与这套绑定流程,而是由词法作用域决定 this 值。真正掌握 this,关键不是死记规则,而是养成分析“函数在何处、以何种方式被调用”的习惯。


















