执行上下文
发布: (2026年4月6日 GMT+8 08:30)
2 分钟阅读
原文: Dev.to
Source: Dev.to
把 Execution Context 想象成一个厨房。
在你开始烹饪(执行代码)之前,需要工作空间、工具(变量)和配方(函数)。所以,这里的 Execution Context 就是准备阶段或 “set‑up”。
Global Execution Context (GEC)
- 这是默认的盒子。
- 如果你的代码不在函数内部,它就位于这里。
- GEC 会自动创建两样东西:
window对象(在浏览器中)和特殊关键字this。
Functional Execution Context (FEC)
- 每次调用函数时,JavaScript 会为该函数创建一个全新的小盒子。
- 该盒子中保存着函数专属的变量和逻辑。
The Two Phases (The “Magic” Trick)
JavaScript 并不是简单地从上到下逐行读取代码并立即执行。它会在你的 “盒子” 中瞬间进行两次遍历。
Fase A: Penciptaan (Alokasi Memori)
- 创建全局对象(
window)。 - 为变量和函数分配内存空间。
- Hoisting:变量声明被设为
undefined,所有函数声明被存入内存。
Fase B: Eksekusi
- 由于 JavaScript 是单线程的(一次只能做一件事),它使用 Call Stack 来追踪当前正在处理的 “盒子”。
- 想象一堆 Pringles 薯片:
- Global Context 是最底层的那片。
- 当你调用
functionA()时,会在其上放置一片新的薯片(Context A)。 - 如果
functionA调用functionB,Context B 会放在 Context A 之上。 - 当
functionB执行完毕,它会从堆栈中 “弹出”(popped),控制权返回到 Context A。