返回

JavaScript 代码的运行机制——解析执行详解

前端

JavaScript 代码的运行过程,实质上分为两个阶段—— 编译阶段和执行阶段。

编译阶段

编译阶段主要负责将 JavaScript 代码转换为可执行的机器码,这一过程主要包括词法分析和语法分析两个步骤。

词法分析

词法分析是指将 JavaScript 代码分解为一个个的词法单元,如、标识符、运算符、标点符号等。词法分析器的工作方式类似于扫描仪,它从左到右逐个扫描 JavaScript 代码中的字符,并根据一定的规则将它们组合成词法单元。

语法分析

语法分析是指检查词法单元之间的语法关系,并根据语法规则将它们组织成语法树。语法分析器的工作方式类似于编译器,它从词法单元的序列中识别出语法结构,并根据语法规则构建语法树。

执行阶段

执行阶段主要负责将编译后的机器码在计算机上执行,这一过程主要由解释器或 JIT(Just-In-Time)编译器完成。

解释器

解释器是一种逐行解释执行 JavaScript 代码的程序。它从语法树的根节点开始,逐个解析语法树中的节点,并根据节点的类型执行相应的操作。解释器的工作方式比较简单,但效率相对较低。

JIT 编译器

JIT 编译器是一种将 JavaScript 代码动态编译为机器码的程序。它在解释器执行 JavaScript 代码的同时,会将经常执行的代码片段编译成机器码,并将其缓存起来。当这些代码片段再次执行时,JIT 编译器就会直接执行编译后的机器码,从而提高代码的执行效率。

JavaScript 引擎

JavaScript 引擎是负责执行 JavaScript 代码的程序,它包含了词法分析器、语法分析器、解释器和 JIT 编译器等组件。JavaScript 引擎的工作方式类似于虚拟机,它提供了一个沙箱环境,使 JavaScript 代码能够在其中安全地执行。

JavaScript 虚拟机

JavaScript 虚拟机是 JavaScript 引擎的另一种叫法,它本质上是一个独立的程序,负责执行 JavaScript 代码。JavaScript 虚拟机通常与浏览器或 Node.js 等 JavaScript 运行环境捆绑在一起,为 JavaScript 代码提供运行环境。