在JavaScript中,一个执行上下文的生命周期可以分为三个阶段,具体如下:
-
创建阶段(Creation phase):
- 创建变量对象(Variable Object):在这个阶段,JavaScript引擎会扫描当前上下文中的代码,并创建变量对象。这个对象包含了函数的参数、函数声明和变量声明。对于全局上下文,这个对象就是全局对象(如window对象)。
- 建立作用域链(Scope Chain):作用域链用于解析变量的访问权限。JavaScript引擎会根据当前执行上下文的词法环境和作用域嵌套关系来建立作用域链。
- 确定this的值:在创建阶段,JavaScript引擎还会确定this关键字的值,这取决于函数的调用方式。
-
执行阶段(Execution phase):
- 变量赋值:根据代码中的赋值操作,给变量分配内存并赋予相应的值。
- 函数引用:根据代码中的函数调用,将函数的引用添加到变量对象中。
- 代码执行:按照代码的顺序执行语句,包括表达式计算、条件判断、循环等操作。同时,如果函数内部存在局部变量,当执行到相应代码行时,会为局部变量分配内存空间。
-
回收阶段(Cleanup phase):
- 解除引用:将执行上下文中的变量和函数从变量对象中移除,解除对它们的引用。
- 内存回收:对不再被引用的变量和对象进行垃圾回收,释放占用的内存空间。当执行上下文不再被引用或执行完毕后,会触发这个回收阶段。
这三个阶段共同构成了执行上下文的生命周期。在代码的执行过程中,这个生命周期会反复进行,直到所有的代码都执行完毕并且没有引用指向该执行上下文时,执行上下文将被彻底回收。