一.写在前面
大家好,我是一溪风月
一名前端菜鸟,梦想成为一名优秀的程序员,众所周知在现代的Web开发中,已经离不开JavaScript了,但是你是否知道,它曾经并不优秀,JavaScript非常简单上手只需要几分钟,同时它也很难,精通它需要很多年,并且随着ECMAScript的不断发展,想要掌握JavaScript已经变的非常不容易,但是在前端领域JavaScript的地位无可代替,并且它也是前端高阶运用的前提,这是JavaScript系列的开篇,希望能从0到1的带你入门和精通JavaScript,后续内容请持续关注JavaScript
专栏,转载请注明作者,如果觉得有帮助请不要吝啬你美妙的赞哦~
二.JavaScript起源
在1994年的时候,网景公司(Netscape)发布了Navigator浏览器0.9版本,这是历史上第一个比较成熟的网络浏览器,轰动一时,但是这个版本的浏览器只能用来浏览静态的页面,不具备与访问者互动交互的能力,网景公司急需一种网页脚本语言,使的浏览器可以与网页互动。
网景公司当时想要选择一种语言来嵌入到浏览器中,采用现有的语言,比如 Perl
Python
Tcl
Scheme
等等,允许他们直接嵌入网页,基于此种需求和战略,1995年网景公司招募了程序员Brendan Eich
,希望将Scheme语言作为网页脚本语言的可能性。
但是就在此时,发生了另外一件大事,1995年Sun公司将oak
语言改名为Java,正式推向市场,Java推出之后立马在市场上引起轰动,Java当初有一个口号write one run anywhere
网景公司动了心,决定和Sun公司结成联盟,希望将Java嵌入网页种来运行,Brendan Eich
本人非常热衷于Scheme,但是管理层那么时候有点倾向于Java,希望可以简化Java来适应网页脚本的需求。
如果不是接下来的事情,可能现在前端开发就需要使用Java,但是Brendan Eich对此并不感兴趣,它用10天时间设计出来了JavaScript,最初这门语言叫做Mocha(摩卡)在Navigator 2.0 beta版本更名为LiveScript,在Navigator 2.0 beta3 版本正式重命名为JavaScript,当时为了给这门语言搭上Java这个热词。
当然10天设计出来语言足以证明Brendan Eich是天才,但是这门语言当时更像是一个大杂烩,它借鉴了如下语言。
- 借鉴c语言的基本语法
- 借鉴Java语言的数据类型和内存管理。
- 借鉴Scheme语言,将函数提升到了
第一等公民
的地位。 - 借鉴了self语言,使用基于原型的继承机制。
Brendan Eich 曾经这样描述JavaScript,与其说我爱JavaScript,不如说我恨它,他是C语言和self语言一夜情的产物,他的优秀之处并非原创,它的原创之处并不优秀,但是并不要因此对JavaScript失望,目前经历了这么多年的发展,随着ECMA的标准化,JavaScript本身的缺点已经被弥补了,已经变得非常的健壮。
微软公司于1995年首次推出Internet Explorer,从而引发了与Netscape的浏览器大战。微软对Navigator解释器进行了逆向工程,创建了JScript,以与处于领导地位的网景产品同台竞争,这对于开发者来说是一场噩耗,因为需要针对不同的浏览器进行不同的适配。
1996年11月,网景正式向ECMA(欧洲计算机制造商协会)提交语言标准,1997年6月,ECMA以JavaScript语言为基础制定了ECMAScript标准规范ECMA-262, ECMA-262是一份标准,定义了ECMAScript,JavaScript成为了ECMAScript最著名的实现之一,除此之外,ActionScript和JScript也都是ECMAScript规范的实现语言,所以说ECMAScript是一种规范,而JavaScript是这种规范的一种实现。
三.JavaScript的组成
ECMAScript是JavaScript的标准,描述了该语言的语法和基本对象,JavaScript是ECMAScript的语言层面的实现,因为除了语言规范之外,JavaScript还需要对页面和浏览器进行各种操作,除了基本实现之外,还包括DOM操作和BOM操作。
四.JavaScript由谁来运行?
我们经常会说,不同的浏览器有不同的内核组成,其实我们所说的内核是指的渲染引擎。
- Gecko:早期被Netscape和Mozilla Firefox浏览器浏览器使用。
- Trident:微软开发,被IE4~IE11浏览器使用,但是Edge浏览器已经转向Blink。
- Webkit:苹果基于KHTML开发、开源的,用于Safari,Google Chrome之前也在使用。
- Blink:是Webkit的一个分支,Google开发,目前应用于Google Chrome、Edge等。
为什么我们需要JavaScript引擎,因为高级语言需要转化成机器指令来运行,事实上我们编写的JavaScript无论你交给浏览器或者Node执行,最终都需要CPU执行的,但是CPU只认识自己的指令集,实际上是机器语言才能够被CPU所执行,所以我们需要JavaScript引擎帮助我们将JavaScript代码翻译成CPU指令来执行,那么常见的JS引擎有哪些?
- SpiderMonkey:第一款JavaScript引擎,由Brendan Eich开发(也就是JavaScript作者)。
- Chakra:微软开发,用于IT浏览器。
- JavaScriptCore:WebKit中的JavaScript引|擎,Apple公司开发中。
- V8: Google开发的强大JavaScript引擎,也帮助Chrome从众多浏览器中脱颖而出。
五.浏览器内核和JS引擎的关系
比如我们以Webkit内核为例,Webkit内核实际上是由两部分组成的。
- WebCore:负责HTML解析和布局,渲染相关的功能。
- JavaScriptCore:解析执行JavaScript代码。
六.著名的Atwood定律
Stack Overflow的创立者之一的 Jeff Atwood 在2007年提出了著名的 Atwood定律:任何可以使用JavaScript来实现的应用都最终都会使用JavaScript实现。
JavaScript目前应用越来越广泛了,目前主要应用的方向为以下几个方向。
七.总结
这篇文章我们了解了前端中最重要的内容中的最后一环JavaScript,我们首先了解了JavaScript的发展历史,从JavaScript的诞生到,JavaScript的规范化一整个历程,之后我们从JavaScript自身,从宏观列举了JavaScript的组成,包含三个部分,分别是ECMAScript,DOM,BOM,之后我们简单的介绍了内核和JS引擎的关系,这也就解释了为什么Node和浏览器都可以执行JavaScript,最后分享了著名的Atwood定律,随着时代的发展,JS的应用领域越来越广,几乎你可以想到的JS都可以做,如果你想成为一个比较全能的开发人员,那么JS一定是你的首选。