this绑定在执行上下文创建阶段完成,此时代码未执行但this已确定且后续不可变;全局上下文指向全局对象,普通函数调用依严格模式分别绑定全局对象或undefined,对象方法调用绑定调用者对象,new调用绑定新实例,call/apply/bind显式指定,箭头函数继承外层this。

this 绑定是在执行上下文的创建阶段完成的。
创建阶段就确定 this 值
JavaScript 引擎在进入执行上下文(无论是全局、函数还是 eval)的创建阶段,就会立即完成 this 的绑定。此时代码尚未开始执行,但 this 已被赋予一个明确的值,后续执行阶段全程复用该值,不会改变。
这个过程独立于变量声明提升或函数表达式赋值,属于执行上下文初始化的三个核心任务之一(另两个是构建词法环境和变量环境)。
不同调用方式对应不同的创建期绑定规则
- 全局上下文:this 直接绑定到全局对象(如浏览器中的
window) - 普通函数调用(非严格模式):this 在创建阶段就绑定到全局对象;严格模式下则绑定为
undefined - 对象方法调用(如
obj.fn()):创建阶段根据调用位置识别出隐式绑定对象,this 指向obj -
new调用:创建阶段生成新对象,并将 this 绑定到该实例 -
call/apply/bind:显式传入的对象在创建阶段直接设为 this 值 - 箭头函数:没有自己的 this,创建阶段即从外层词法环境“捕获”并固定继承的 this 值
执行阶段只是使用,不再重新绑定
进入执行阶段后,函数体内所有对 this 的访问,都是读取创建阶段已确定的那个值。即使在嵌套调用、异步回调或多次重用同一函数时,只要不触发新的执行上下文创建,this 就保持不变。
立即学习“Java免费学习笔记(深入)”;
例如:
function foo() { console.log(this); }
const obj = { foo };
obj.foo(); // 创建阶段已决定 this === obj,执行阶段只是输出它


















