返回

透过全局和函数的执行上下文,解析JavaScript运行机制

前端

JavaScript 是众多现代Web开发应用中广泛使用的一门语言。它是一种面向对象、解释型且动态的编程语言,具有丰富的库和框架,可以构建出复杂的Web应用。

JavaScript的运行机制基于执行上下文(Execution Context)和执行栈(Execution Stack)两个关键概念。执行上下文是JavaScript引擎创建并使用的环境,它定义了代码的执行环境和可访问的变量。而执行栈是一个后进先出(LIFO)的数据结构,它存储了当前正在执行的函数,以及这些函数中创建的执行上下文。

全局执行上下文

当一个JavaScript程序启动时,JavaScript引擎会创建一个全局执行上下文。全局执行上下文是JavaScript代码执行的默认环境,它定义了所有全局变量和函数的作用域。全局变量和函数在程序的任何地方都可以访问。

函数执行上下文

当一个函数被调用时,JavaScript引擎会创建一个新的函数执行上下文。函数执行上下文的作用域是该函数及其内部嵌套函数的作用域。函数执行上下文包含了函数的参数、局部变量和临时变量。当函数执行完毕后,其执行上下文就会被销毁。

执行栈

执行栈是一个后进先出(LIFO)的数据结构,它存储了当前正在执行的函数,以及这些函数中创建的执行上下文。当一个函数被调用时,它的执行上下文被压入执行栈。当函数执行完毕后,其执行上下文被弹出执行栈。

JavaScript引擎在执行代码时,会根据执行栈中的执行上下文来确定当前正在执行的代码的作用域。这决定了哪些变量和函数可以被访问。

执行流程

当JavaScript引擎执行代码时,它会按照以下步骤进行:

  1. 创建全局执行上下文。
  2. 将全局执行上下文压入执行栈。
  3. 执行全局执行上下文中的代码。
  4. 当遇到函数调用时,创建一个新的函数执行上下文。
  5. 将函数执行上下文压入执行栈。
  6. 执行函数执行上下文中的代码。
  7. 当函数执行完毕后,弹出函数执行上下文。
  8. 重复步骤4-7,直到所有代码执行完毕。

作用域

作用域是变量和函数可被访问的范围。JavaScript中的作用域有两种:全局作用域和局部作用域。

全局作用域是整个程序可以访问的变量和函数的作用域。全局作用域中的变量和函数可以在程序的任何地方访问。

局部作用域是函数内可以访问的变量和函数的作用域。局部作用域中的变量和函数只能在函数内部访问。

总结

JavaScript的执行上下文和执行栈是理解JavaScript代码执行流程和作用域形成机制的关键概念。通过对这两者的深入理解,可以帮助您在编程实践中游刃有余。