JavaScript 是动态语言,V8 无法像 C 那样一次性静态编译为高效的机器码,所以它必须先分析、再执行、再优化。流程大致如下:
也就是说,V8 在执行 JS 前必须先做语法分析和编译为字节码,而不能直接像机器码一样运行。
特性 | JavaScript (V8) | C 编译程序 |
---|---|---|
是否提前分析全代码 | 是(需要生成 AST 和字节码) | 是(但在开发时由开发者完成编译) |
是否解释执行 | 是(字节码解释 + 热代码 JIT) | 否 |
是否动态类型 | 是 | 否(静态类型) |
执行性能 | 一开始慢,热代码后快 | 一开始就快 |
是否需要运行时环境 | 需要 V8 引擎 | 不需要(直接运行) |