JavaScript 的执行上下文是在代码执行时创建的一个环境,用来存储变量和函数,并决定它们之间的访问规则。每当 JavaScript 代码执行时,都会创建一个新的执行上下文。
执行上下文包含以下三种类型:
- 全局执行上下文 (Global Execution Context):在代码开始执行时创建的全局环境。它对整个 JavaScript 程序都是可见的,存储了全局变量、函数声明等。在浏览器中,全局执行上下文关联到
window对象。 - 函数执行上下文 (Function Execution Context):每当一个函数被调用时,就会创建一个函数执行上下文。每个函数执行上下文与一个特定的函数相关联,其中包含了函数的参数、局部变量等。函数执行上下文还具有对外部环境的引用,即闭包。
- Eval 执行上下文 (Eval Execution Context):当代码在
eval()函数中执行时,会创建一个特殊的执行上下文,称为 eval 执行上下文。eval 函数允许在运行时动态执行代码,但由于安全问题和性能问题,它并不常用。
每个执行上下文都有自己的变量对象,用于存储变量、函数声明和函数参数。变量对象在创建上下文时被初始化,并根据代码的执行顺序逐步填充和更新。在执行上下文中,还有一个特殊的变量 this,它指向当前执行代码的对象。
执行上下文的生命周期由 JavaScript 引擎管理。当一段代码执行完毕后,与之相关的执行上下文会被销毁,其中的变量和函数也随之被释放。
总结
执行环境可以被认为是一个在函数被运行的时候被创建的执行环境。
由于 JavaScript是一种被执行堆栈所管理的单线程语言,所以一次只允许其中一个执行上下文被运行。