美文网首页
痛苦javascript之旅--js引擎

痛苦javascript之旅--js引擎

作者: 路家小白 | 来源:发表于2016-05-23 14:37 被阅读138次

最近在学js中的作用域,视频老师讲的很简单,但是我又是那种必须知道来龙去脉才能理解透彻的程序媛,所以就深入了解一下,不看不知道,一看就看了好几天,才了解了个大概,还不透彻,心累有没有,感觉自己笨笨的。有些地方也没有理解很透彻,但还是想记录下来,怕忘记,哎,记忆力不好的程序媛,真是硬伤啊,废话不多说了,看看偶的成果吧,思密达!

1.什么是JavaScript解析引擎?

简单地说,JavaScript解析引擎就是能够“读懂”JavaScript代码,并准确地给出代码运行结果的一段程序。比方说,当你写了var a = 1 + 1;这样一段代码,JavaScript引擎做的事情就是看懂(解析)你这段代码,并且将a的值变为2。

学过编译原理的人都知道,对于静态语言来说(如Java、C++、C),处理上述这些事情的叫编译器(Compiler),相应地对于JavaScript这样的动态语言则叫解释器(Interpreter)。这两者的区别用一句话来概括就是:编译器是将源代码编译为另外一种代码(比如机器码,或者字节码),而解释器是直接解析并将代码运行结果输出。 比方说,firebug的console就是一个JavaScript的解释器。

但是,现在很难去界定说,JavaScript引擎它到底算是个解释器还是个编译器,因为,比如像V8(Chrome的JS引擎),它其实为了提高JS的运行性能,在运行之前会先将JS编译为本地的机器码(native machine code),然后再去执行机器码(这样速度就快很多),相信大家对JIT(Just 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这门语言定义了一整套完整的标准。其中包括:

var,if,else,break,continue等是JavaScript的关键词

abstract,int,long等是JavaScript保留词

怎么样算是数字、怎么样算是字符串等等

定义了操作符(+,-,>,<等)

定义了JavaScript的语法

定义了对表达式,语句等标准的处理算法,比如遇到==该如何处理

⋯⋯

标准的JavaScript引擎就会根据这套文档去实现,注意这里强调了标准,因为也有不按照标准来实现的,比如IE的JS引擎。这也是为什么JavaScript会有兼容性的问题。至于为什么IE的JS引擎不按照标准来实现,就要说到浏览器大战了,这里就不赘述了,自行Google之。

所以,简单的说,ECMAScript定义了语言的标准,JavaScript引擎根据它来实现,这就是两者的关系。

3. JavaScript解析引擎与浏览器又是什么关系?

简单地说,JavaScript引擎是浏览器的组成部分之一。因为浏览器还要做很多别的事情,比如解析页面、渲染页面、Cookie管理、历史记录

等等。那么,既然是组成部分,因此一般情况下JavaScript引擎都是浏览器开发商自行开发的。比如:IE9的Chakra、Firefox的

TraceMonkey、Chrome的V8等等。

从而也看出,不同浏览器都采用了不同的JavaScript引擎。因此,我们只能说要深入了解哪个JavaScript引擎

我们应该如何去了解JavaScript引擎的工作原理 -- 简明现代魔法 

相关文章

  • 痛苦javascript之旅--js引擎

    最近在学js中的作用域,视频老师讲的很简单,但是我又是那种必须知道来龙去脉才能理解透彻的程序媛,所以就深入了解一下...

  • 游戏相关

    现有跨平台游戏引擎 物理引擎 Javascript物理引擎:matter-js, verlet-js, physi...

  • javascript链式操作

    javascript链式操作 最早的js引擎写法

  • ECMAScript6环境搭建

    使用 Javascript 引擎的系统(如 Node.js) Node.js 是一个 Javascript 运行环...

  • 浏览器内核简介

    什么是浏览器内核 浏览器引擎分为排版引擎和Js引擎两种。js引擎就是解释执行javascript的,而排版引擎就是...

  • Javascript引擎线程

    Javascript引擎 ,也可以称为JS内核,主要负责处理Javascript脚本程序,例如V8引擎。Javas...

  • 整理

    1、template.js template.js是前端javascript模板引擎,主要解决了html+js 拼...

  • Web程序性能优化——asm.js和WebAssembly

    asm.js asm.js是JavaScript语言中一个可以高度优化的子集。通过避免JavaScript引擎某些...

  • JavaScript 究竟是怎样执行的?

    摘要: 理解 JS 引擎运行原理。 作者:前端小智 原文:搞懂 JavaScript 引擎运行原理 Fundebu...

  • Node.js安装与nmp的基本使用

    Node.js安装与nmp的基本使用 JavaScript引擎 chrome的V8引擎 初识Node.js npm...

网友评论

      本文标题:痛苦javascript之旅--js引擎

      本文链接:https://www.haomeiwen.com/subject/mnenrttx.html