[JS] You Don't Know JavaScript[Get Started] - what is J

前言

在今年9月顺利转职成为前端工程师,在準备面试的时候有稍微学习一些关于js的知识,不过等到真的成为前端工程师后,遇到了很多问题是以前準备的知识中无法解决的,所以透过公司前辈推荐来Studying这本书,希望能够对于JS有更深入的了解。

Backwards & Forwards

JS的最基本原则之一是保持向后兼容,很多人会将它与向前兼容搞混,向后兼容的意思代表着一但某一个代码接受它是有效的JS代码,那们无论到什么时候或是更改什么版本,这个代码都还是有效的(EX:一个1995年写的JS代码到至今都还是能够成功运行)这就是JS的向后兼容。

而向前兼容则代表你可以在较旧的JS引擎中使用比较新的JS语法,在使用新的与JS语法不会导致旧的JS代码(旧的JS引擎)程序中断或错误。

虽然很多人希望JS可以这么做,但是JS并没有办法进行向前兼容。

相比之下HTML与CSS都是向前兼容的,代表着如果你是无法将10几年前的HTML或CSS代码再次运行的,但是如果你在2010年之后的浏览启中使用2019的最新功能,它是可以正常处理的,这就是HTML与CSS的向前兼容。

Jumping the Gaps

由于JS的不向前兼容性,这代表着你不能再2016的引擎中使用ES2019的功能,如果是使用新的语法,会完全无法编译和运行,如果是API则程序可能会运行到一定程度后就抛出异常停止。

由于JS的开发者常常会面临到版本不对的问题,这时候编译器便可以很好的解决这个问题(常见的是Babel),它可以等效的将你较新的JS语法转换为较旧的语法来解决问题,而JS希望开发者能够使用最新版本的JS进行开发,以便让代码乾净且有效地传递编成思想,而兼容问题便可以交给编译器来解决。


What's in an Interpretation?

对于JS来说有一个长期的争议,那就是JS到底是编译程式还是脚本语言? 这就得先解释这两者的差异。

脚本语言

脚本语言是一种编成语言,它只在被调用的时候进行解释或编译,它是为了缩短传统的编写-编译-连接-运行而创造出来的电脑编程语言。

特点

脚本语言是一种解释性语言,他不向C/C++可以编译成二进为代码,它不需要编译便可以直接使用,由解释器来负责解释。脚本语言一般都是以文本形式存在。相对于编译型电脑编程语言,用脚本语言开发的程式在执行时,由其所对应的解释器(或称虚拟机)解释并执行。脚本语言通常都有简单、易学、易用的特性,目的就是希望能让程式设计师快速完成程式的编写工作。

编译语言

编译语言是一种程式语言了类型,通过编译器来实作,先将程式码编译为机械码后再加以执行。

特点

执行速度较直译是语言快,因为在编译期就已经先编译成机械码可以直接执行,不用像直译语言一样,还要多一道直译程式。编译语言的程式开发速度以及除错时间较长。

为了清楚的了解JS是编译语言还是直译语言的真正原因在于错误的处理方式。

在脚本语言或是直译语言中,通常是由上而下的执行方式,所以有可能前面4行都是正常的,但是当执行到第5行的时候才发现错误,而这个错误可能是因为上文的执行错误导致,也有可能是它本身的语法错误,这种需要根据上下文来定义错误的方式(错误推迟)是不期望的。

而JS会在执行之前解析,因为他要求在代码开始执行前确定整个代码没有错误(例如重複的参数名称),若不事先分析代码则无法识别这些错误。

所以JS是一种直译语言,但是JS在被解析后会转化为 optimized (binary)之后再执行,简单来说,JS将程式码编译成各种二进制字节然后再交给JS虚拟机执行,而整个JS的程序源流程 :

开发人员编辑好程序后交给Babel进行编译,编译完成后交给JS引擎。JS引擎将代码解析为AST(Abstract Syntax Tree)。之后再将AST转换为字节代码,然后通过优化的JIT编译器(即时编译器)进行细部转换。最后由JS VM(virtual machine)执行。

由上面的流程看来JS的处理方式比较像在处理直译语言,但是JS会经过编译,让我们能够在代码执行之前收到静态错误,这种行为更像是编译语言。

Strictly Speaking

在2009发布的ES5中就有添加了严格模式,但是虽然严格模式有许多好处,但是却会造成旧语法的错误,所以到现在为止,严格模式仍然处于选择性的功能。

而严格模式的好处可以让JS有更佳的优化和高效率的运行代码,也可以让大型开发的团队避免一些错误。

参考文献 :
You Don't Know JavaScript
脚本语言


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章