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

this 绑定是在执行上下文的创建阶段完成的。
创建阶段就确定 this 值
JavaScript 引擎在进入执行上下文(无论是全局、函数还是 eval)的创建阶段,就会立即完成 this 的绑定。此时代码尚未开始执行,但 this 已被赋予一个明确的值,后续执行阶段全程复用该值,不会改变。
这个过程独立于变量声明提升或函数表达式赋值,属于执行上下文初始化的三个核心任务之一(另两个是构建词法环境和变量环境)。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
不同调用方式对应不同的创建期绑定规则
- 全局上下文:this 直接绑定到全局对象(如浏览器中的
window) - 普通函数调用(非严格模式):this 在创建阶段就绑定到全局对象;严格模式下则绑定为
undefined - 对象方法调用(如
obj.fn()):创建阶段根据调用位置识别出隐式绑定对象,this 指向obj -
new调用:创建阶段生成新对象,并将 this 绑定到该实例 -
call/apply/bind:显式传入的对象在创建阶段直接设为 this 值 - 箭头函数:没有自己的 this,创建阶段即从外层词法环境“捕获”并固定继承的 this 值
执行阶段只是使用,不再重新绑定
进入执行阶段后,函数体内所有对 this 的访问,都是读取创建阶段已确定的那个值。即使在嵌套调用、异步回调或多次重用同一函数时,只要不触发新的执行上下文创建,this 就保持不变。
例如:
function foo() { console.log(this); }
const obj = { foo };
obj.foo(); // 创建阶段已决定 this === obj,执行阶段只是输出它Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










