返回

JavaScript系列 - 执行上下文:深入剖析

前端

  1. 执行上下文:概念与创建过程

在 JavaScript 中,执行上下文是程序执行的必要环境,它负责管理代码的执行过程和提供变量的作用域。每个执行上下文都有自己的变量环境和词法环境,并受该环境内的作用域规则约束。

执行上下文的创建过程如下:

  1. 当 JavaScript 程序启动时,会创建一个全局执行上下文。
  2. 当函数被调用时,会创建一个新的执行上下文。
  3. 新创建的执行上下文将被压入调用栈。
  4. 当函数执行完毕时,它的执行上下文将从调用栈中弹出。

2. 执行上下文与调用栈

调用栈是一个存储执行上下文的后进先出(LIFO)数据结构。当函数被调用时,它的执行上下文将被压入调用栈。当函数执行完毕时,它的执行上下文将从调用栈中弹出。

调用栈有助于跟踪程序的执行流程。当程序遇到函数调用时,调用栈会将当前执行上下文压入栈顶,并将控制权移交至新函数的执行上下文。当新函数执行完毕时,调用栈会将该函数的执行上下文弹出,并将控制权移交回上一个函数的执行上下文。

3. 执行上下文内部:变量环境与词法环境

每个执行上下文都有自己的变量环境和词法环境。变量环境存储着当前执行上下文中声明的变量,而词法环境存储着该执行上下文及其所有父执行上下文中的变量。

当执行上下文中需要访问变量时,它会首先在变量环境中查找。如果变量未在变量环境中找到,它将继续在词法环境中查找。

变量环境和词法环境共同决定了变量的作用域。作用域是指变量可以被访问的范围。

4. 执行上下文与作用域

作用域是变量可以被访问的范围。在 JavaScript 中,作用域由执行上下文决定。

JavaScript 中有两种作用域:

  • 全局作用域: 全局作用域是指整个程序都可以访问的变量的作用域。
  • 局部作用域: 局部作用域是指函数内部变量的作用域。

局部作用域内的变量只能在该函数内部访问,而全局作用域内的变量可以在程序的任何地方访问。

5. 执行上下文与闭包

闭包是指可以访问其创建函数的局部变量的函数。闭包可以用来在函数执行完毕后仍然访问其局部变量。

闭包在 JavaScript 中有很多应用场景,例如:

  • 创建私有变量。
  • 实现模块化编程。
  • 延迟执行。

6. 执行上下文与 this

this 关键字指向当前执行上下文的所属对象。在全局执行上下文中,this 指向 window 对象。在函数执行上下文中,this 指向函数所属的对象。

this 关键字在 JavaScript 中有很多应用场景,例如:

  • 访问对象属性和方法。
  • 调用函数。
  • 绑定事件处理函数。

总结

执行上下文是 JavaScript 程序执行的必要环境。它负责管理代码的执行过程和提供变量的作用域。

执行上下文与调用栈、变量环境、词法环境、作用域、闭包和 this 关键字等概念密切相关。理解这些概念对于编写出健壮、可维护的 JavaScript 程序至关重要。