Open logan70 opened 4 years ago
JavaScript可执行代码有以下四种类型,每个类型的代码均在其自己的执行上下文内运行:
模块代码 和 eval代码 在本文中不作讨论
ES Module
import
export
执行上下文 是一个描述代码运行时所在环境的抽象概念。
JS引擎再开始执行代码前,会创建 全局执行上下文 ,全局代码(不属于任何函数的代码)在全局执行上下文中执行。 全局执行上下文 在每个JS程序中只有一个。
当执行全局代码时,可能会碰到函数调用,这时JS引擎会创建 函数执行上下文 并执行函数代码,也就是说在一个执行上下文中可以创建另一个执行上下文。函数中再调用函数或函数中调用自身也是如此。这些执行上下文就构成了 执行上下文栈。
执行上下文栈 是一种后进先出(last-in-first-out, LIFO)的栈式数据结构,运行时执行上下文(Running Excution Context)永远处于栈顶位置。
当要创建新的执行上下文时,会将当前执行上下文挂起,新的执行上下文被创建并压入栈中,成为运行时执行上下文。当对应代码执行完毕后,该执行上下文出栈,上一个执行上下文又成为运行时执行上下文。
图片出自 JavaScript Internals: Execution Context
JavaScript的执行上下文栈
执行上下文(Exexution Contexts)
JavaScript可执行代码有以下四种类型,每个类型的代码均在其自己的执行上下文内运行:
ES Module
,平常用的import
、export
即属于此类型的关键字)执行上下文 是一个描述代码运行时所在环境的抽象概念。
JS引擎再开始执行代码前,会创建 全局执行上下文 ,全局代码(不属于任何函数的代码)在全局执行上下文中执行。 全局执行上下文 在每个JS程序中只有一个。
当执行全局代码时,可能会碰到函数调用,这时JS引擎会创建 函数执行上下文 并执行函数代码,也就是说在一个执行上下文中可以创建另一个执行上下文。函数中再调用函数或函数中调用自身也是如此。这些执行上下文就构成了 执行上下文栈。
执行上下文栈(Execution Context Stack)
执行上下文栈 是一种后进先出(last-in-first-out, LIFO)的栈式数据结构,运行时执行上下文(Running Excution Context)永远处于栈顶位置。
当要创建新的执行上下文时,会将当前执行上下文挂起,新的执行上下文被创建并压入栈中,成为运行时执行上下文。当对应代码执行完毕后,该执行上下文出栈,上一个执行上下文又成为运行时执行上下文。