执行上下文(Execution Context)和执行栈(Execution Stack)是 JavaScript 中用来管理代码执行的重要概念。
执行上下文(Execution Context):
执行上下文是 JavaScript 中代码执行的环境抽象,它定义了代码被执行时的运行环境。每当 JavaScript 代码被执行时,都会创建一个执行上下文。
执行上下文包含了三种类型:
-
全局执行上下文(Global Execution Context):整个 JavaScript 代码的默认执行上下文,存在于代码执行开始时,只有一个全局执行上下文。
-
函数执行上下文(Function Execution Context):每当函数被调用时,都会创建一个函数执行上下文。函数执行上下文与该函数相关联,并且可能会有多个函数执行上下文同时存在(当递归调用函数时)。
-
评估和执行上下文(Eval Execution Context):
eval()
函数执行时会创建一个执行上下文。
每个执行上下文都包含了:
- 变量对象(Variable Object):包含变量、函数声明和函数参数。
- 作用域链(Scope Chain):用于查找变量的链式结构,保证对变量的有效访问。
- this 指向:指向函数执行时的当前对象。
执行栈(Execution Stack):
执行栈是用来存储执行上下文的一种数据结构,遵循先进后出(FILO)的原则。在 JavaScript 中,执行栈用来追踪代码的执行位置。当代码被执行时,执行上下文会被压入执行栈,当执行结束后,会从执行栈中弹出。
每当调用一个函数时,会创建一个新的执行上下文,并被推送到执行栈的顶部。当函数执行完成后,其对应的执行上下文会被从执行栈中弹出,控制权交回给前一个执行上下文。
这种执行上下文的入栈和出栈的过程形成了执行栈。如果执行栈变得太大(比如出现了过多的嵌套函数调用),会导致栈溢出(stack overflow)错误。
总结来说,执行上下文是描述代码执行环境的抽象概念,而执行栈是用来管理执行上下文的数据结构。JavaScript 引擎通过这些概念来跟踪和管理代码的执行过程。
Was this helpful?
0 / 0