返回
深入浅出执行上下文与执行栈
前端
2023-10-04 21:31:51
nt
exts) 是 JavaScript 中的一个概念,它表示当前正在执行的代码环境。每个执行上下文都有自己的变量对象、作用域链和当前正在执行的函数。
-
执行上下文的创建
- 当一个函数被调用时,会创建一个新的执行上下文,并将该函数的调用堆栈压入执行栈。
- 当一个函数返回时,它的执行上下文会被销毁,并且调用堆栈中的下一个函数的执行上下文会被激活。
-
执行栈
- 执行栈是一个数据结构,它存储了当前正在执行的函数的调用顺序。
- 当一个函数被调用时,它的调用堆栈会被压入执行栈。
- 当一个函数返回时,它的调用堆栈会被弹出执行栈。
-
执行上下文和执行栈的关系
- 执行上下文是当前正在执行的代码环境。
- 执行栈存储了当前正在执行的函数的调用顺序。
- 执行上下文和执行栈是相互关联的,一个执行上下文对应一个调用堆栈。
-
执行上下文和作用域链
- 作用域链是一个由执行上下文组成的链,它确定了变量的访问权限。
- 当一个变量在当前执行上下文中找不到时,就会沿着作用域链向上查找,直到找到该变量或到达全局作用域。
-
执行上下文和闭包
- 闭包是能够访问其创建时的执行上下文中的变量的函数。
- 闭包可以用来创建私有变量和方法,以及实现延迟执行。
在 JavaScript 的世界里,执行上下文(execution contexts)和执行栈(execution stack)是两个重要的概念,它们共同构建了 JavaScript 的执行机制,影响着代码的运行方式和变量的作用域。
1. 执行上下文
执行上下文可以理解为一个独立的代码执行环境,它包含了代码执行过程中所需的一切信息,包括:
- 全局对象(global object):通常是
window
对象,包含全局变量和函数。 - 局部变量对象(local variable object):存储函数内部声明的变量。
- 作用域链(scope chain):包含当前执行上下文及其父执行上下文的作用域。
- 当前正在执行的函数(current function):决定当前执行上下文的函数。
2. 执行栈
执行栈是一个数据结构,它存储了当前正在执行的函数的调用顺序。当一个函数被调用时,它的执行上下文会被压入执行栈。当一个函数返回时,它的执行上下文会被弹出执行栈。
3. 执行上下文和执行栈的关系
执行上下文和执行栈是相互关联的。一个执行上下文对应一个调用堆栈。当一个函数被调用时,会创建一个新的执行上下文,并将该函数的调用堆栈压入执行栈。当一个函数返回时,它的执行上下文会被销毁,并且调用堆栈中的下一个函数的执行上下文会被激活。
4. 作用域链
作用域链是一个由执行上下文组成的链,它确定了变量的访问权限。当一个变量在当前执行上下文中找不到时,就会沿着作用域链向上查找,直到找到该变量或到达全局作用域。
5. 闭包
闭包是能够访问其创建时的执行上下文中的变量的函数。闭包可以用来创建私有变量和方法,以及实现延迟执行。
总之,执行上下文和执行栈是 JavaScript 中重要的概念,理解它们有助于深入理解 JavaScript 的执行机制和变量的作用域。