在JavaScript中,每当代码开始运行,引擎都会为其建立一个执行上下文。执行上下文决定了变量、函数和this的取值规则。无论是全局代码还是函数调用,背后都离不开它的创建与执行两个步骤。

什么是执行上下文
执行上下文是JavaScript引擎用来跟踪代码执行所处环境的一种内部概念。常见类型包括全局执行上下文、函数执行上下文以及eval执行上下文。每次进入新的执行环境,就会创建一个新的上下文并放入调用栈。
创建阶段做了什么
创建阶段发生在代码真正执行之前,主要完成三件事:
- 确定this的指向,即确定执行上下文中的this值
- 建立词法环境LexicalEnvironment,用来存放let、const以及函数声明
- 建立变量环境VariableEnvironment,用来存放var声明的变量并初始化为undefined
这也是为什么会出现变量提升:var声明的变量在创建阶段已被放入环境并记录为undefined。
简单示例看提升
function demo() {
console.log(a); // 输出 undefined
var a = 10;
console.log(a); // 输出 10
}
demo();
上面代码中,a在创建阶段就进入变量环境,所以第一次打印不会报错。
执行阶段做了什么
执行阶段才按代码顺序运行语句,给变量赋值、执行函数调用。此时词法环境和变量环境里的绑定会被更新。
用代码模拟创建过程
// 模拟函数执行上下文的创建和执行
function createContext(func) {
// 1. 创建阶段
var context = {
this: this,
lexical: {},
variable: {}
};
// 收集var声明
context.variable.a = undefined;
// 2. 执行阶段
context.variable.a = 20;
console.log(context.variable.a);
}
createContext();
this是如何确定的
在创建阶段,this的值根据调用方式决定。全局上下文中this指向全局对象;函数上下文中,普通调用this为undefined或全局对象,使用方法调用则指向调用者。
| 调用方式 | this指向 |
|---|---|
| 普通函数调用 | 全局对象或undefined |
| 对象方法调用 | 该对象 |
| new调用 | 新创建的实例 |
总结
JavaScript通过先创建后执行的方式管理代码运行。创建阶段准备this、词法环境和变量环境,执行阶段再赋值与运行。理解这个过程,就能明白提升、作用域与this的行为来源。
JavaScript执行上下文创建过程修改时间:2026-07-28 05:45:08