长沙seo网站管理,广昌建设局官方网站,网站一年得多少钱,新媒体运营好做吗1. 什么是JavaScript解析引擎#xff1f; 简单地说#xff0c;JavaScript解析引擎就是能够“读懂”JavaScript代码#xff0c;并准确地给出代码运行结果的一段程序。比方说#xff0c;当你写了 var a  1  1; 这样一段代码#xff0c;JavaScript引擎做的事情就是看懂#… 1. 什么是JavaScript解析引擎 简单地说JavaScript解析引擎就是能够“读懂”JavaScript代码并准确地给出代码运行结果的一段程序。比方说当你写了 var a  1  1; 这样一段代码JavaScript引擎做的事情就是看懂解析你这段代码并且将a的值变为2。 学过编译原理的人都知道对于静态语言来说如Java、C、C处理上述这些事情的叫编译器Compiler相应地对于JavaScript这样的动态语言则叫解释器Interpreter。这两者的区别用一句话来概括就是编译器是将源代码编译为另外一种代码比如机器码或者字节码而解释器是直接解析并将代码运行结果输出。 比方说firebug的console就是一个JavaScript的解释器。 但是现在很难去界定说JavaScript引擎它到底算是个解释器还是个编译器因为比如像V8Chrome的JS引擎它其实为了提高 JS的运行性能在运行之前会先将JS编译为本地的机器码native machine code然后再去执行机器码这样速度就快很多相信大家对JITJust In Time Compilation一定不陌生吧。 我个人认为不需要过分去强调JavaScript解析引擎到底是什么了解它究竟做了什么事情我个人认为就可以了。对于编译器或者解释器究竟是如何看懂代码的翻出大学编译课的教材就可以了。 这里还要强调的就是JavaScript引擎本身也是程序代码编写而成。比如V8就是用C/C写的。 2. JavaScript解析引擎与ECMAScript是什么关系 JavaScript引擎是一段程序我们写的JavaScript代码也是程序如何让程序去读懂程序呢这就需要定义规则。比如之前提到的var a  1  1;它表示  左边var代表了这是申明declaration它申明了a这个变量  右边的表示要将1和1做加法  中间的等号表示了这是个赋值语句  最后的分号表示这句语句结束了 上述这些就是规则有了它就等于有了衡量的标准JavaScript引擎就可以根据这个标准去解析JavaScript代码了。那么这里的 ECMAScript就是定义了这些规则。其中ECMAScript 262这份文档就是对JavaScript这门语言定义了一整套完整的标准。其中包括  varifelsebreakcontinue等是JavaScript的关键词  abstractintlong等是JavaScript保留词  怎么样算是数字、怎么样算是字符串等等  定义了操作符-等  定义了JavaScript的语法  定义了对表达式语句等标准的处理算法比如遇到该如何处理  ⋯⋯ 标准的JavaScript引擎就会根据这套文档去实现注意这里强调了标准因为也有不按照标准来实现的比如IE的JS引擎。这也是为什么JavaScript会有兼容性的问题。至于为什么IE的JS引擎不按照标准来实现就要说到浏览器大战了这里就不赘述了自行Google之。 所以简单的说ECMAScript定义了语言的标准JavaScript引擎根据它来实现这就是两者的关系。 3. JavaScript解析引擎与浏览器又是什么关系 简单地说JavaScript引擎是浏览器的组成部分之一。因为浏览器还要做很多别的事情比如解析页面、渲染页面、Cookie管理、历史记录 等等。那么既然是组成部分因此一般情况下JavaScript引擎都是浏览器开发商自行开发的。比如IE9的Chakra、Firefox的 TraceMonkey、Chrome的V8等等。 从而也看出不同浏览器都采用了不同的JavaScript引擎。因此我们只能说要深入了解哪个JavaScript引擎。 4. 深入了解其内部原理的途径有哪些 搞清楚了前面三个问题那这个问题就好回答了。个人认为主要途径有如下几种依次由浅入深  看讲JavaScript引擎工作原理的书这种方式最方便不过我个人了解到的这样的书几乎没有但是Dmitry A.Soshnikov博客上的文章真的是非常的赞建议直接看英文实在英文看起来吃力的可以看译本  看ECMAScript的标准文档这种方式相对直接原汁原味因为引擎就是根据标准来实现的。目前来说可以看第五版和第三版不过要看懂也是不容易的。  看JS引擎源代码这种方式最直接当然也最难了。因为还牵涉到了如何实现词法分析器语法分析器等等更加底层的东西了而且并非所有的引擎代码都是开源的。 5. 以上几种方式中第一种都很难看明白怎么办 其实第一种方式中的文章作者已经将文档中内容提炼出来用通俗易懂的方式阐述出来了。如果看起来还觉得吃力那说明还缺少两块的东西  对JavaScript本身还理解的不够深入如果你刚刚接触JavaScript或者说以前甚至都没有接触过。那一下子就想要去理解内部工作原理的确是很吃力的。首先应该多看看书多实践实践从知识和实践的方式来了解JavaScript预言特性。这种情况下你只需要了解现象。比方说(function(){})() 这样可以直接调用该匿名函数、用闭包可以解决循环中的延迟操作的变量值获取问题等等。要了解这些都是需要多汲取和实践的。实践这里就不多说了而知识汲取方面可以多看看书和博客。这个层面的书就相对比较多了《Professional JavaScript for Web Developers》就是本很好的书中文版请自行寻找。  缺乏相应的领域知识当JavaScript也达到一定深度了但是还是看不大明白或者没法很深入到内部去一探究竟。那就意味着缺少对 应的领域知识。这里明显的就是编译原理相关的知识。不过其实对这块了解个大概基本看起来就没问题了。要再继续深入那需要对编译原理了解的很深入比如 说词法分析采用什么算法一般怎么处理。会有什么问题如何解决AST生成算法一般有哪几种等等。那要看编译原理方面的书也有基本经典的书比如《Compilers: Principles, Techniques, and Tools》这本也是传说中的龙书还有非常著名的《SICP》和《PLAI》。 不过其实根据个人经验对于Dmitry的文章要看懂它只要你对JavaScript有一定深度的了解同时你大学计算机的课程都能大致掌握了尤其 是操作系统也就是说基础不错理解起来应该没问题。因为这些文章基本没有涉及底层编译相关的只是在解释文档的内容并且其中很多东西都是相通的比 如context的切换与CPU的进程切换、函数相关的的局部变量的栈存储、函数退出的操作等等都是一致的。 转载于:https://www.cnblogs.com/guchengnan/p/9448828.html