V8 执行 JavaScript 的过程

JavaScript 是动态语言,V8 无法像 C 那样一次性静态编译为高效的机器码,所以它必须先分析、再执行、再优化。流程大致如下:

  1. 解析(Parsing)
  2. 解释执行(Interpreter)
  3. 优化编译(JIT)

也就是说,V8 在执行 JS 前必须先做语法分析和编译为字节码,而不能直接像机器码一样运行。


C/C++ 编译后的二进制程序


核心对比

特性 JavaScript (V8) C 编译程序
是否提前分析全代码 是(需要生成 AST 和字节码) 是(但在开发时由开发者完成编译)
是否解释执行 是(字节码解释 + 热代码 JIT)
是否动态类型 否(静态类型)
执行性能 一开始慢,热代码后快 一开始就快
是否需要运行时环境 需要 V8 引擎 不需要(直接运行)