今天看了一篇较为基础的文章,做个简要的总结,把文章内容进行提炼,再加上一些自己的理解。
解释型语言和编译型语言
JavaScript
是一种解释型的编程语言,我们可能也听过编译型语言,那两种语言的区别是什么?
首先,我们常说的C++.java.Python 以及JavaScript都属于高级语言,但是计算机唯一可以识别的语言只有机器语言,也就是0和1.所以要把我们认识的代码转成计算机可以识别的语言有两种方式:解释和编译。下图是两种方式的对比。
总结:
编译型“一次编译,无限次运行”。编译器来编译,系统执行。(闭源,常见 C、C ++、Go。);
解释型“一次编写,到处运行”,解释器解释并执行。(开源,要不然运行不了啊,常见的PHP、Ruby、Python 和 JavaScript)
我自己的理解:
编译型就好比我们学校有个翻译机器(编译器),一次性翻译了一篇外国文献,你看的时候非常快(执行效率高),但是完成整个翻译的时候需要花费时间,翻译完成之后(二进制代码)对这个平台(学校)有一定的依赖性。
解释型就好比一个翻译,你说一句,现场给你翻译一句,所以运行时比编译型语言慢很多。
随着即时编译(JIT采用两种方式混合使用)的发展,逐渐缩小两者的差距,V8采用的就是这种技术。(热点代码)
JavaScript 代码的执行过程
字节码(byte code)是一种包含执行程序、由一序列 OP代码(操作码)/数据对
组成的二进制文件。字节码是一种中间码,它比机器码更抽象,需要直译器转译后才能成为机器码的中间代码。相比机器码,字节码不仅占用内存少,而且生成字节码的时间很快,提升了启动速度。
JavaScript引擎(解释器)
JavaScript引擎是执行JavaScript代码的计算机程序。主流浏览器都内置了JavaScript引擎。所有JavaScript引擎都包含一个调用栈和一个堆。
JavaScript是一种单线程编程语言,浏览器内核中只有一个 JavaScript 引擎线程。原因是作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作 DOM(文档对象模型 将 web 页面与脚本或编程语言连接起来),如果是多线程会带来很复杂的同步问题。
总结:
通过学习,对解释型语言和编译型语言有了总体的了解,又接着 JavaScript深入了解了解释型语言的具体执行过程。其实最后我还有些疑问,比如JavaScript代码的执行过程中最后的编译器和编译方式中的编译器一样吗?解释型语言解释和执行不是都由解释器来做吗,问题先放在着,等着后续的深入学习再来解答吧。