(引子:javascript其实是个私生子)我在上一篇博文最后说道,想写一篇关于javascript基础语法的文章,原因是我在读很多优秀的javascript源码时候常常被javascript诡异的语法搞的精疲力尽,所以时不时的加固javascript基础知识是十分有必要的,这些知识每次温故或者你换个角度去思考都能收获颇多,那么如此深不可测的语言是怎么诞生的呢?它的祖师爷在创造它的时候是基于什么思考的呢?我想如果大伙知道了这段历史,或许理解起javascript来就会感觉跟轻松些跟惬意些,说不定很多人因此而想好好的学习它。人总有点八卦的小毛病,回顾下一件事情或一个东西的历史,探寻他们历史过程中的种种有趣的细节,一定是件很有意思的事情,我想这篇文章应该会吸引很多人的眼球吧。
大家看看下面这两张照片:
这位就是javascript的开山祖师爷:Bremdan Eich(布兰登·艾奇),现在在Mozilla公司担任CTO。(额头好长啊,又宽,要是希特勒在世一定会说这是太标准的雅利安人)。
javascript的诞生于浏览器的鼻祖网景公司(Netscape),大约是1994年左右,网景公司(Netscape)发布了Navigator浏览器0.9版,这是一款很经典的浏览器,网景公司(Netscape)的用户数因此而出现了井喷的态势,但是Navigator0.9不具备和访问者互动的能力,在那个上网速度比蜗牛还慢的时代,网景公司(Netscape)急需一种脚本语言,使得浏览器和网页进行交互,从而提升用户的体验。
针对这个问题,网景公司(Netscape)有两种选择,一是采用现有的脚本语言,二是自己发明一个新的脚本语言。当时网景公司(Netscape)的高层对这个问题争论不休。在这些喋喋不休的争论里,时间走到了1995年,这一年发生了一件创造历史的大事件我的本家语言java横空出世,java凭借“一次编写,到处运行的”强大宣传,大有未来主宰的霸气,这些让网景公司(Netscape)高层们一下子被java所俘获,如是网景公司(Netscape)和sun公司结盟,网景公司(Netscape)不仅允许java程序以applet的形式嵌入到浏览器,直接在浏览器里面运行,甚至还打算把java作为脚本嵌入到网页,只是最后发现网页会变的过于复杂而放弃,但是javascript的java印记永远都挥之不去。(这段历史读的我十分自豪,我虽然想以后远离一些java但是毕竟现在我还是一名java工程师)。
事情的转折发生在1995年4月,网景公司(Netscape)录用了Bremdan Eich(布兰登·艾奇)(虽然Bremdan Eich(布兰登·艾奇),是javascript的祖师爷,但是他的介入或许也是javascript悲剧的开始)。我们还是接着说网景公司(Netscape)吧,1995年5月,网景公司(Netscape)做出了决策,未来的网页脚本语言必须看上去和java足够相似,但是比java简单,使得非专业的网页作者能很快的上手。
Bremdan Eich(布兰登·艾奇)被任命为这个简化版的java的设计师。但是Bremdan Eich(布兰登·艾奇)对java一点兴趣都没有,为了应付公司的安排的任务,他只用10天时间就设计出了javascript。悲剧就这么诞生了。
为什么Bremdan Eich(布兰登·艾奇)对java一点兴趣都没有了,大家接着往下读哈。
Brendan Eich的主要方向和兴趣是函数式编程,网景公司招聘他的目的,是研究将Scheme语言作为网页脚本语言的可能性。Brendan Eich本人也是这样想的,以为进入新公司后,会主要与Scheme语言打交道。(没想到美国公司也有这样的恶习,我以前有家公司非常的BT,特别是对刚毕业或者工作时间不长的程序员,你想做java我偏偏不给你做,让你做C#,你想做C#,别天真,你去倒腾java,很多程序员就是这么被致残的)。
10天诞生一种语言,不管怎么说我还是把Brendan Eich当神看。但是神创造世界也不能太一蹴而就了,我们这些凡夫俗子很多时候做个小功能模块如果领导就给你10天时间,也会叫苦连天的,10天诞生一种语言这不是神还是啥啊。由于javascript设计的时间实在太短,导致很多细节考虑不周,因此javascript写出的程序混乱不堪,成了许多程序员的梦魇,差点被人抛弃,直到ajax的出世,才让人们终于找到理由忍受他的畸形。
总的来说啊,Brendan Eich设计思路是这样的:
1.借鉴C语言的基本语法;
2.借鉴Java语言的数据类型和内存管理;
3.借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位;
4.借鉴Self语言,使用基于原型(prototype)的继承机制。
所以,Javascript语言实际上是两种语言风格的混合产物(简化的)函数式编程+(简化的)面向对象编程。这是由Brendan Eich(函数式编程)与网景公司(面向对象编程)共同决定的。
不管怎么说,javascript和java是有关系的,javascript里面有java的思想所以说javascript和java无关是不正确的。
其实一直到现在Brendan Eich还是看不起讨厌java。假如不是公司决策Brendan Eich绝对不会把java作为javascript的设计原型,即使是现在,Brendan Eich还是讨厌自己的作品。他曾经说过:“与其说我爱Javascript,不如说我恨它。它是C语言和Self语言***的产物。十八世纪英国文学家约翰逊博士说得好:'它的优秀之处并非原创,它的原创之处并不优秀。”
哎,可怜的javascript啊,不管你做的如何好,你就是一个永远不讨父亲喜欢的私生子啊!大家应该多多疼爱下他,他很需要大家的关怀啊。