🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### JS的解释阶段 首先得明确: **JS是解释型语音,所以它无需提前编译,而是由解释器实时运行** 引擎对JS的处理过程可以简述如下: ``` 1. 读取代码,进行词法分析(Lexical analysis),然后将代码分解成词元(token) 2. 对词元进行语法分析(parsing),然后将代码整理成语法树(syntax tree) 3. 使用翻译器(translator),将代码转为字节码(bytecode) 4. 使用字节码解释器(bytecode interpreter),将字节码转为机器码 ``` 最终计算机执行的就是机器码。 为了提高运行速度,现代浏览器一般采用即时编译(`JIT-Just In Time compiler`) 即字节码只在运行时编译,用到哪一行就编译哪一行,并且把编译结果缓存(`inline cache`) 这样整个程序的运行速度能得到显著提升。 而且,不同浏览器策略可能还不同,有的浏览器就省略了字节码的翻译步骤,直接转为机器码(如chrome的v8) 总结起来可以认为是: **核心的JIT编译器将源码编译成机器码运行**