全局执行上下文是JavaScript程序运行的唯一起点,由引擎在脚本加载完成时自动创建;它初始化this、提升var和function声明、注册let/const并进入执行阶段。

全局执行上下文是 JavaScript 程序运行的起点,它在脚本加载完成、代码即将执行时自动创建,且整个程序中只存在一个。
触发时机很明确
它不是手动创建的,而是在以下时刻由引擎自动建立:
- 浏览器中,HTML 页面解析完
<script>标签并开始执行其中 JS 代码时 - Node.js 中,启动一个 .js 文件时
- 模块(ESM)环境下,顶层代码执行前也会先建立全局上下文(尽管模块有独立作用域,但全局上下文仍作为基础存在)
创建阶段的核心动作
这个阶段不执行语句,只做初始化准备,主要完成三件事:
-
绑定 this 值:非严格模式下指向
window(浏览器)或global(Node),严格模式下为undefined -
初始化变量环境:扫描所有
var声明,设为undefined;处理function声明,把函数名和完整函数体挂载到全局对象上(即“函数提升”) -
注册词法环境:记录
let和const声明,但不赋值——它们处于“暂时性死区”,直到执行到对应语句才初始化
它包含哪些东西
全局执行上下文不是空壳,它实际承载了程序最外层的运行基础:
立即学习“Java免费学习笔记(深入)”;
- 全局对象本身(
window或global),所有全局声明最终都成为它的属性 - 作用域链只有一层:就是它自己的词法环境,外部引用为
null - 变量环境(
var相关)和词法环境(let/const/function相关)在全局上下文中通常被合并管理,但逻辑上区分
后续执行阶段的表现
创建完成后,引擎立即进入执行阶段,按顺序处理代码:
- 遇到
var a = 1:先已在创建阶段声明为undefined,现在赋值为1 - 遇到
let b = 2:此前已注册,此时完成初始化;若在声明前访问,会报ReferenceError - 遇到函数调用(如
foo()):暂停当前上下文,创建并压入新的函数执行上下文


















