JavaScript中执行上下文和执行栈是什么?
JavaScript 执行上下文和执行栈的定义及工作原理
定义
执行上下文是指代码在执行时所处的具体环境,它包含了执行代码所需的全部信息,例如变量、函数以及可访问的对象。JavaScript 在运行时会动态创建执行上下文来管理和维护这些信息。
执行栈(Execution Stack),也被称为调用栈(Call Stack),是一种数据结构,用于跟踪程序中的执行流程。每当一段代码被执行时,都会为其创建一个新的执行上下文并将其推入执行栈中;当该段代码执行完毕后,对应的执行上下文会被移除出栈。
工作原理
1. 执行上下文的生命周期
执行上下文具有三个主要阶段:
-
创建阶段
当进入新的执行上下文时,JavaScript 引擎会在内存中分配空间,并完成一些初始化操作。这包括设置this
值、处理函数参数、解析变量声明和函数声明等。此过程通常称为“预编译”,其中涉及以下几个步骤:- 创建活动对象(Activation Object, AO)。AO 是一种特殊的对象,在这个对象中保存了当前作用域内的所有变量、函数声明及其初始值。
- 将形参名和局部变量作为 AO 的属性名,默认值设为
undefined
。 - 如果存在同名的函数声明,则优先将函数体赋值给 AO 中对应的名字。
函数预编译的过程可以更好地解释为什么某些行为会发生,例如变量提升现象。<