JavaScript是一门脚本语言,是需要被别人解释执行的,这个别人就是JavaScript解释器。它读取一条JS语句、翻译、执行,然后再读取下一条JS语句,周而复始。
JavaScript解释器是用来干嘛的呢?
目的就是执行JavaScript源代码
JS解释器包含了词法解析器,句法解析器,字节码生成器,字节码解释器。
词法解析器
它可以让一行行代码源码拆分成一个个最小的词义单位。所谓的词义单位就是在语法上不能再分,最小的单个字符或者字符组合。
var number = 2; //解析成下面的json格式
[
{ 'type':'keyword', 'value':'var'
},
{ 'type':'identifier', 'value':'number',
},
{ 'type':'Punctuator', 'value':'=',
},
{ 'type':'Numeric', 'value':'2',
}
{ 'type':'Punctuator', 'value':';'
}
]
句法分析器
将上面的分析出来的数组,根据语法规则,转换为抽象语法树,用Esprimas解析工具可以知道也转换成了json格式。
这个抽象语法树有什么用呢?
人家说压缩优化代码,这我又不懂了,然后又说编译器、IDE等都有很多用处(现在没有办法去深入技能不够)
在美团点评技术中看到了语法树可以用来重构javaScript代码
字节码生成器
它的作用呢就是把语法树转换为javaScript引擎能读懂和执行的的二进制代码。
每种javascript引擎都有自己的字节码格式,最简单的做法就是把语义单位翻译成二进制
字节码解释器
当然这个一环跟一环的,有了二进制代码了,那么接下来就是执行二进制代码咯,产生了你可以用眼睛看到的结果咯。
用 js 来 编译 js 看起来是个高大上的东西,实际原理其实很简单,无非就是利用 js 对象属性可以用字符串表示 这个特性来实现的黑魔法罢了。之所以看起来那么 深奥, 大概是由于网上现有的教程
在这篇文章中,我们将通过 JS 构建我们自己的 JS 解释器,用 JS 写 JS,这听起来很奇怪,尽管如此,这样做我们将更熟悉 JS,也可以学习 JS 引擎是如何工作的!
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!