返回

深入浅出执行上下文与执行栈

前端

nt
exts) 是 JavaScript 中的一个概念,它表示当前正在执行的代码环境。每个执行上下文都有自己的变量对象、作用域链和当前正在执行的函数。

  1. 执行上下文的创建

    • 当一个函数被调用时,会创建一个新的执行上下文,并将该函数的调用堆栈压入执行栈。
    • 当一个函数返回时,它的执行上下文会被销毁,并且调用堆栈中的下一个函数的执行上下文会被激活。
  2. 执行栈

    • 执行栈是一个数据结构,它存储了当前正在执行的函数的调用顺序。
    • 当一个函数被调用时,它的调用堆栈会被压入执行栈。
    • 当一个函数返回时,它的调用堆栈会被弹出执行栈。
  3. 执行上下文和执行栈的关系

    • 执行上下文是当前正在执行的代码环境。
    • 执行栈存储了当前正在执行的函数的调用顺序。
    • 执行上下文和执行栈是相互关联的,一个执行上下文对应一个调用堆栈。
  4. 执行上下文和作用域链

    • 作用域链是一个由执行上下文组成的链,它确定了变量的访问权限。
    • 当一个变量在当前执行上下文中找不到时,就会沿着作用域链向上查找,直到找到该变量或到达全局作用域。
  5. 执行上下文和闭包

    • 闭包是能够访问其创建时的执行上下文中的变量的函数。
    • 闭包可以用来创建私有变量和方法,以及实现延迟执行。

在 JavaScript 的世界里,执行上下文(execution contexts)和执行栈(execution stack)是两个重要的概念,它们共同构建了 JavaScript 的执行机制,影响着代码的运行方式和变量的作用域。

1. 执行上下文

执行上下文可以理解为一个独立的代码执行环境,它包含了代码执行过程中所需的一切信息,包括:

  • 全局对象(global object):通常是 window 对象,包含全局变量和函数。
  • 局部变量对象(local variable object):存储函数内部声明的变量。
  • 作用域链(scope chain):包含当前执行上下文及其父执行上下文的作用域。
  • 当前正在执行的函数(current function):决定当前执行上下文的函数。

2. 执行栈

执行栈是一个数据结构,它存储了当前正在执行的函数的调用顺序。当一个函数被调用时,它的执行上下文会被压入执行栈。当一个函数返回时,它的执行上下文会被弹出执行栈。

3. 执行上下文和执行栈的关系

执行上下文和执行栈是相互关联的。一个执行上下文对应一个调用堆栈。当一个函数被调用时,会创建一个新的执行上下文,并将该函数的调用堆栈压入执行栈。当一个函数返回时,它的执行上下文会被销毁,并且调用堆栈中的下一个函数的执行上下文会被激活。

4. 作用域链

作用域链是一个由执行上下文组成的链,它确定了变量的访问权限。当一个变量在当前执行上下文中找不到时,就会沿着作用域链向上查找,直到找到该变量或到达全局作用域。

5. 闭包

闭包是能够访问其创建时的执行上下文中的变量的函数。闭包可以用来创建私有变量和方法,以及实现延迟执行。

总之,执行上下文和执行栈是 JavaScript 中重要的概念,理解它们有助于深入理解 JavaScript 的执行机制和变量的作用域。