一、相关名词解释
编译器:编译型语言在代码执行前通过编译成二进制文件,然后该文件就可以运行了。c++、c、go 解释器:解释型语言,每一次运行时动态解释和执行。python、JavaScript
解释器翻译代码流程:源代码(通过词法分析、语法分析)=====抽象语法树(AST)(词意分析)=====字节码(解释执行)=====执行
二、V8执行代码流程
1、源代码通过词法分析和语法分析生成抽象语法书和执行上下文(一些代码的环境信息:变量环境、词法环境、this、外部环境)。抽象语法树在eslint(检查JavaScript代码编写规范)和babel(es6转es5)都需要用到。
2、通过解释器生成字节码,并解释执行字节码。
为什么会有字节码:V8一开始是吧抽象语法树转成机器码的,但是在手机中占用内存太多了,使用引入字节码。
3、在解释器执行过程中发现一段代码被重复执行,它会使用编译器编译为机器码,然后再次需要执行这段代码时,只需要执行这段机器码记好了。
字节码+解释器和编译器这种技术叫即时编译(JIT)。