本文介紹下JavaScript和 ECMAScript的誕生及發展歷史,以及標準化過程。前端
1、JavaScript誕生node
1994年,網景公司(Netscape)發佈了Navigator瀏覽器0.9版。這是歷史上第一個比較成熟的網絡瀏覽器,轟動一時。可是,這個版本的瀏覽器只能用來瀏覽,不具有與訪問者互動的能力。好比,若是網頁上有一欄"用戶名"要求填寫,瀏覽器就沒法判斷訪問者是否真的填寫了,只有讓服務器端判斷。若是沒有填寫,服務器端就返回錯誤,要求用戶從新填寫,這太浪費時間和服務器資源了。
所以,網景公司急需一種網頁腳本語言,潛入到網頁中,使得瀏覽器能夠與網頁互動。網頁腳本語言究竟是什麼語言?網景公司當時有兩個選擇:一個是採用現有的語言,好比Perl、Python、Tcl、Scheme等等,容許它們直接嵌入網頁;另外一個是發明一種全新的語言。這兩個選擇各有利弊。第一個選擇,有利於充分利用現有代碼和程序員資源,推廣起來比較容易;第二個選擇,有利於開發出徹底適用的語言,實現起來比較容易。到底採用哪個選擇,網景公司內部爭執不下,管理層一時難如下定決心。程序員
就在這時,發生了另一件大事:1995年Sun公司將Oak語言更名爲Java,正式向市場推出。
Sun公司大肆宣傳,許諾這種語言能夠"一次編寫,處處運行"(Write Once, Run Anywhere),它看上去極可能成爲將來的主宰。網景公司動了心,決定與Sun公司結成聯盟。它不只容許Java程序以applet(小程序)的形式,直接在瀏覽器中運行;甚至還考慮直接將Java做爲腳本語言嵌入網頁,只是由於這樣會使HTML網頁過於複雜,後來纔不得不放棄。總之,當時的形勢就是,網景公司的整個管理層,都是Java語言的信徒,Sun公司徹底介入網頁腳本語言的決策。所以,Javascript後來就是網景和Sun兩家公司一塊兒攜手推向市場的,這種語言被命名爲"Java+script"並非偶然的。數據庫
1995年4月,網景公司錄用了34歲的系統程序員Brendan Eich。Brendan Eich的主要方向和興趣是函數式編程,網景公司招聘他的目的,是研究將Scheme語言做爲網頁腳本語言的可能性。Brendan Eich本人也是這樣想的,覺得進入新公司後,會主要與Scheme語言打交道。但僅僅一個月以後,1995年5月,網景公司作出決策,將來的網頁腳本語言必須"看上去與Java足夠類似",可是比Java簡單,使得非專業的網頁做者也能很快上手。這個決策實際上將Perl、Python、Tcl、Scheme等非面向對象編程的語言都排除在外了。Brendan Eich被指定爲這種"簡化版Java語言"的設計師。
可是,他對Java一點興趣也沒有。爲了應付公司安排的任務,他只用10天時間就把Javascript設計出來了。因爲設計時間過短,語言的一些細節考慮得不夠嚴謹,致使後來很長一段時間,Javascript寫出來的程序混亂不堪。編程
總的來講,他的設計思路是這樣的:
(1)借鑑C語言的基本語法;
(2)借鑑Java語言的數據類型和內存管理;
(3)借鑑Scheme語言,將函數提高到"第一等公民"(first class)的地位;
(4)借鑑Self語言,使用基於原型(prototype)的繼承機制。
因此,Javascript語言其實是兩種語言風格的混合產物----(簡化的)函數式編程+(簡化的)面向對象編程。這是由Brendan Eich(函數式編程)與網景公司(面向對象編程)共同決定的。小程序
Brendan Eich設計的這個腳本語言,是爲Netscape公司準備在1995年發行的 Netscape Navigator 2.0 瀏覽器提供的。 開始的時候這個語言是被稱爲LiveScript,就在 Netscape Navigator 2.0 即將正式發佈前,Netscape 將其改名爲 JavaScript,目的是爲了利用 Java 這個因特網時髦詞彙。這個是 JavaScript 1.0 版本。該版本推出,得到了很大成功。
由於 JavaScript 1.0 如此成功,Netscape 在 Netscape Navigator 3.0 中發佈了 1.1 版。恰巧那個時候,微軟決定進軍瀏覽器,發佈了 IE 3.0 並搭載了一個 JavaScript 的克隆版,叫作 JScript(這樣命名是爲了不與 Netscape 潛在的許可糾紛)。微軟步入 Web 瀏覽器領域的這重要一步雖然令其聲名狼藉,但也成爲 JavaScript 語言發展過程當中的重要一步。
在微軟進入後,有 3 種不一樣的 JavaScript 版本同時存在:Netscape Navigator 3.0 中的 JavaScript、IE 中的 JScript 以及 CEnvi 中的 ScriptEase(一家稱做 Nombas 的公司開發的可嵌入網頁的腳本語言)。與 C 和其餘編程語言不一樣的是,JavaScript 並無一個標準來統一其語法或特性,而這 3 種不一樣的版本偏偏突出了這個問題。隨着業界擔憂的增長,這個語言的標準化顯然已經勢在必行。後端
2、ECMAScript的誕生瀏覽器
1996年11月,JavaScript的創造者Netscape公司,決定將JavaScript提交給國際標準化組織ECMA,但願這種語言可以成爲國際標準。ECMA是European Computer Manufacturers Association的縮寫,即歐洲計算機制造商協會,ECMA是制定信息傳輸與通信的國際化標準組織。 ECMA的第39號技術專家委員會(Technical Committee 39,簡稱TC39)負責制訂ECMAScript標準,成員包括Netscape、Sun、Microsoft、Mozilla、Google等大公司。
1997年,ECMA發佈262號標準文件(ECMA-262)的初版,規定了瀏覽器腳本語言的標準,並將這種語言稱爲ECMAScript,這個版本就是1.0版。 該標準從一開始就是針對JavaScript語言制定的,可是之因此不叫JavaScript,有兩個緣由。一是商標,Java是Sun公司的商標,根據受權協議,只有Netscape公司能夠合法地使用JavaScript這個名字,且JavaScript自己也已經被Netscape公司註冊爲商標。二是想體現這門語言的制定者是ECMA,不是Netscape,這樣有利於保證這門語言的開放性和中立性。
所以,ECMAScript和JavaScript的關係是,前者是後者的規格,後者是前者的一種實現。Jscript和ActionScript也算是ECMAScript的一種實現。服務器
3、ECMAScript的發展網絡
1997年,ECMAScript 1.0發佈。
1998年,ECMAScript 2.0發佈
1999年,ECMAScript 3.0發佈。3.0版是一個巨大的成功,在業界獲得普遍支持,成爲通行標準,奠基了JavaScript語言的基本語法,之後的版本徹底繼承。直到今天,初學者一開始學習JavaScript,其實就是在學3.0版的語法。
2000年,ECMAScript 4.0開始醞釀。這個版本最後沒有經過。爲何ES4沒有經過呢?由於這個版本太激進了,對ES3作了完全升級,致使標準委員會的一些成員不肯意接受。
2007年,ECMAScript 4.0版草案發布,原本預計次年8月發佈正式版本。可是,各方對因而否經過這個標準,發生了嚴重分歧。以Yahoo、Microsoft、Google爲首的大公司,反對JavaScript的大幅升級,主張小幅改動;以JavaScript創造者Brendan Eich爲首的Mozilla公司,則堅持當前的草案。
2008年,因爲對於4.0版本應該包括哪些功能,各方分歧太大,爭論過於激烈,ECMA開會決定,停止ECMAScript 4.0的開發,將其中涉及現有功能改善的一小部分,發佈爲ECMAScript 3.1(會後不久,ECMAScript 3.1就更名爲ECMAScript 5),而將其餘激進的設想擴大範圍,放入之後的版本。因爲會議的氣氛,4.0版本的項目代號起名爲Harmony(和諧)。
2009年,ECMAScript 5.0版正式發佈。Harmony項目則一分爲二,一些較爲可行的設想定名爲JavaScript.next繼續開發,後來演變成ECMAScript 6;一些不是很成熟的設想,則被視爲JavaScript.next.next,在更遠的未來再考慮推出。
2011年,ECMAscript 5.1版發佈,而且成爲ISO國際標準。
2013年3月,ECMAScript 6草案凍結,再也不添加新功能。
2013年12月,ECMAScript 6草案發布。
2015年6月,ECMAScript 6正式經過,成爲國際標準。從2000年算起,這時已通過去了15年。
ECMAScript 6 提出了不少新的特性,重點增強了模塊、類聲明、詞法塊定界、迭代器和生成器、異步編程的回調、模式解析以及合適的尾調用,另外還擴展了ECMAScript的內置庫以支持更多的抽象數據結構。其目的就是使JavaScript能夠用來編寫複雜的應用程序,成爲企業級開發語言。
4、commonJs介紹
在JavaScript的發展歷程中,它主要在瀏覽器前端發光發熱。因爲官方規範(ECMAScript)規範化的時間較早,規範涵蓋的範疇很是小。這些規範中包含詞法、類型、上下文、表達式、聲明(statement)、方法、對象等語言的基本要素。在實際應用中,JavaScript的表現能力取決於宿主環境中的API支持程度。
1)在Web 1.0時代,只有對DOM、BOM等基本的支持。
2)隨着Web 2.0的推動,HTML5嶄露頭角,它將Web網頁帶進Web應用的時代,在瀏覽器中出現了更多、更強大的API供JavaScript調用。
可是,對於JavaScript自身而言,它的規範依然是薄弱的,還有不少缺陷,如沒有模塊系統(在ECMAScript 6解決了);標準庫較少。ECMAScript僅定義了部分核心庫,對於文件系統,I/O流,數據庫訪問等常見需求卻沒有標準的API,致使它沒法用在後端開發。
在js發展的過程當中,社區也在爲JavaScript制定了相應的規範,其中CommonJS規範的提出算是最爲重要的里程碑。在2009年8月,CommonJS誕生了。CommonJS規範爲JavaScript制定了一個美好的願景——但願JavaScript可以在任何地方運行。以達到像Python、Ruby和Java具有開發大型應用的基礎能力,而不是停留在小腳本程序的階段。
他們指望那些用CommonJS API寫出的應用能夠具有跨宿主環境執行的能力,這樣不只能夠利用JavaScript開發富客戶端應用,並且還能夠編寫如下應用,如服務器端JavaScript應用程序;命令行工具;桌面圖形界面應用程序。 現在,CommonJS中的大部分規範雖然依舊是草案,可是已經初顯成效,爲JavaScript開發大型應用程序指明瞭一條很是棒的道路。目前,它依舊在成長中,這些規範涵蓋了模塊、二進制、Buffer、字符集編碼、I/O流、進程環境、文件系統、套接字、單元測試、Web服務器網關接口、包管理等。 CommonJS是一種規範,業界有不少它的實現,其中最著名的是node.js,另外還有Apache的CouchDB等。