[TOC]
* * * * *
# JavaScript的發展歷史
### JavaScript的誕生
JavaScript因為互聯網而生,緊隨著瀏覽器的出現而問世。回顧它的歷史,就要從瀏覽器的歷史講起。
1990年底,歐洲核能研究組織(CERN)科學家Tim Berners-Lee,在全世界最大的電腦網絡——互聯網的基礎上,發明了萬維網(World Wide Web),從此可以在網上瀏覽網頁文件。最早的網頁只能在操作系統的終端里瀏覽,也就是說只能使用命令行操作,網頁都是在字符窗口中顯示,這當然非常不方便。
1992年底,美國國家超級電腦應用中心(NCSA)開始開發一個獨立的瀏覽器,叫做Mosaic。這是人類歷史上第一個瀏覽器,從此網頁可以在圖形界面的窗口瀏覽。
1994年10月,NCSA的一個主要程序員Marc Andreessen聯合風險投資家Jim Clark,成立了Mosaic通信公司(Mosaic Communications),不久后改名為Netscape。這家公司的方向,就是在Mosaic的基礎上,開發面向普通用戶的新一代的瀏覽器Netscape Navigator。
1994年12月,Navigator發布了1.0版,市場份額一舉超過90%。
Netscape公司很快發現,Navigator瀏覽器需要一種可以嵌入網頁的腳本語言,用來控制瀏覽器行為。當時,網速很慢而且上網費很貴,有些操作不宜在服務器端完成。比如,如果用戶忘記填寫“用戶名”,就點了“發送”按鈕,到服務器再發現這一點就有點太晚了,最好能在用戶發出數據之前,就告訴用戶“請填寫用戶名”。這就需要在網頁中嵌入小程序,讓瀏覽器檢查每一欄是否都填寫了。
管理層對這種瀏覽器腳本語言的設想是:功能不需要太強,語法較為簡單,容易學習和部署。那一年,正逢Sun公司的Java語言問世,市場推廣活動非常成功。Netscape公司決定與Sun公司合作,瀏覽器支持嵌入Java小程序(后來稱為Java applet)。但是,瀏覽器腳本語言是否就選用Java,則存在爭論。后來,還是決定不使用Java,因為網頁小程序不需要Java這么“重”的語法。但是,同時也決定腳本語言的語法要接近Java,并且可以支持Java程序。這些設想直接排除了使用現存語言,比如Perl、Python和TCL。
<br/>
1995年,Netscape公司雇傭了程序員Brendan Eich開發這種網頁腳本語言。Brendan Eich有很強的函數式編程背景,希望以Scheme語言(函數式語言鼻祖LISP語言的一種方言)為藍本,實現這種新語言。
1995年5月,Brendan Eich只用了10天,就設計完成了這種語言的第一版。它是一個大雜燴,語法有多個來源:
* 基本語法:借鑒C語言和Java語言。
* 數據結構:借鑒Java語言,包括將值分成原始值和對象兩大類。
* 函數的用法:借鑒Scheme語言和Awk語言,將函數當作第一等公民,并引入閉包。
* 原型繼承模型:借鑒Self語言(Smalltalk的一種變種)。
* 正則表達式:借鑒Perl語言。
* 字符串和數組處理:借鑒Python語言。
為了保持簡單,這種腳本語言缺少一些關鍵的功能,比如塊級作用域、模塊、子類型(subtyping)等等,但是可以利用現有功能找出解決辦法。這種功能的不足,直接導致了后來JavaScript的一個顯著特點:對于其他語言,你需要學習語言的各種功能,而對于JavaScript,你常常需要學習各種解決問題的模式。而且由于來源多樣,從一開始就注定,JavaScript的編程風格是函數式編程和面向對象編程的一種混合體。
Netscape公司的這種瀏覽器腳本語言,最初名字叫做Mocha,1995年9月改為LiveScript。12月,Netscape公司與Sun公司(Java語言的發明者和所有者)達成協議,后者允許將這種語言叫做JavaScript。這樣一來,Netscape公司可以借助Java語言的聲勢,而Sun公司則將自己的影響力擴展到了瀏覽器。
之所以起這個名字,并不是因為JavaScript本身與Java語言有多么深的關系(事實上,兩者關系并不深),而是因為Netscape公司已經決定,使用Java語言開發網絡應用程序,JavaScript可以像膠水一樣,將各個部分連接起來。當然,后來的歷史是Java語言的瀏覽器插件失敗了,JavaScript反而發揚光大。
1995年12月4日,Netscape公司與Sun公司聯合發布了JavaScript語言。
1996年3月,Navigator 2.0瀏覽器正式內置了JavaScript腳本語言。
### JavaScript與Java的關系
JavaScript和Java是兩種不一樣的語言,但是它們之間存在聯系。
JavaScript的基本語法和對象體系,是模仿Java而設計的。但是,JavaScript沒有采用Java的靜態類型。正是因為JavaScript與Java有很大的相似性,所以這門語言才從一開始的LiveScript改名為JavaScript。基本上,JavaScript這個名字的原意是“很像Java的腳本語言”。
在JavaScript語言中,函數是一種獨立的數據類型,以及采用基于原型對象(prototype)的繼承鏈。這是它與Java語法最大的兩點區別。JavaScript語法要比Java自由得多。
另外,Java語言需要編譯,而JavaScript語言則是運行時由解釋器直接執行。
總之,JavaScript的原始設計目標是一種小型的、簡單的動態語言,與Java有足夠的相似性,使得使用者(尤其是Java程序員)可以快速上手。
### JavaScript的版本
1997年7月,ECMAScript 1.0發布。
1998年6月,ECMAScript 2.0版發布。
1999年12月,ECMAScript 3.0版發布,成為JavaScript的通行標準,得到了廣泛支持。
2007年10月,ECMAScript 4.0版草案發布,對3.0版做了大幅升級,預計次年8月發布正式版本。草案發布后,由于4.0版的目標過于激進,各方對于是否通過這個標準,發生了嚴重分歧。以Yahoo、Microsoft、Google為首的大公司,反對JavaScript的大幅升級,主張小幅改動;以JavaScript創造者Brendan Eich為首的Mozilla公司,則堅持當前的草案。
2008年7月,由于對于下一個版本應該包括哪些功能,各方分歧太大,爭論過于激進,ECMA開會決定,中止ECMAScript 4.0的開發(即廢除了這個版本),將其中涉及現有功能改善的一小部分,發布為ECMAScript 3.1,而將其他激進的設想擴大范圍,放入以后的版本,由于會議的氣氛,該版本的項目代號起名為Harmony(和諧)。會后不久,ECMAScript 3.1就改名為ECMAScript 5。
2009年12月,ECMAScript 5.0版正式發布。Harmony項目則一分為二,一些較為可行的設想定名為JavaScript.next繼續開發,后來演變成ECMAScript 6;一些不是很成熟的設想,則被視為JavaScript.next.next,在更遠的將來再考慮推出。TC39的總體考慮是,ECMAScript 5與ECMAScript 3基本保持兼容,較大的語法修正和新功能加入,將由JavaScript.next完成。當時,JavaScript.next指的是ECMAScript 6。第六版發布以后,將指ECMAScript 7。TC39預計,ECMAScript 5會在2013年的年中成為JavaScript開發的主流標準,并在此后五年中一直保持這個位置。
2011年6月,ECMAscript 5.1版發布,并且成為ISO國際標準(ISO/IEC 16262:2011)。到了2012年底,所有主要瀏覽器都支持ECMAScript 5.1版的全部功能。
2013年3月,ECMAScript 6草案凍結,不再添加新功能。新的功能設想將被放到ECMAScript 7。
2013年12月,ECMAScript 6草案發布。然后是12個月的討論期,聽取各方反饋。
2015年6月,ECMAScript 6正式發布,并且更名為“ECMAScript 2015”。這是因為TC39委員會計劃,以后每年發布一個ECMAScirpt的版本,下一個版本在2016年發布,稱為“ECMAScript 2016”。
除了ECMAScript的版本,很長一段時間中,Netscape公司(以及繼承它的Mozilla基金會)在內部依然使用自己的版本號。這導致了JavaScript有自己不同于ECMAScript的版本號。1996年3月,Navigator 2.0內置了JavaScript 1.0。JavaScript 1.1版對應ECMAScript 1.0,但是直到JavaScript 1.4版才完全兼容ECMAScript 1.0。JavaScript 1.5版完全兼容ECMAScript 3.0。目前的JavaScript 1.8版完全兼容ECMAScript 5。
- 前言
- 走進前端工程師的世界
- 前端知識圖譜
- 前端學習方法
- 計算機基礎知識
- 寫一封信給4個月后的自己
- Github的使用
- 網頁基礎知識
- 2.1認識網頁
- 2.2網頁相關名詞
- 2.3Web標準
- 2.4開發環境配置
- 2.4.1Hbuilder使用技巧
- 2.4.2SublineText使用技巧
- 大前端必會的PS技巧
- HTML
- 網頁制作入門
- CSS
- HTML+CSS整站開發
- HTML5
- HTML5 概述
- HTML5 語法
- HTML5 屬性
- HTML5 事件
- HTML5 瀏覽器支持
- HTML5 新元素
- HTML5 Video(視頻)
- HTML5 Audio(音頻)
- HTML5 Input類型
- HTML5 表單元素
- HTML5 語義元素
- HTML5 表單屬性
- CSS3
- CSS3 介紹
- CSS3 選擇器
- 基本選擇符
- 關系選擇符
- 屬性選擇符
- 偽類選擇符
- 偽對象選擇符
- CSS3 邊框
- CSS3 圓角
- CSS3 背景
- CSS3 漸變
- CSS3 文本效果
- CSS3 字體
- CSS3 2D轉換
- CSS3 3D轉換
- CSS3 過渡
- CSS3 動畫
- CSS3 多列
- CSS3 用戶界面
- CSS3 圖片
- CSS3 按鈕
- CSS3 分頁
- CSS3 框大小
- CSS3 彈性盒子
- CSS3 顏色
- CSS3 多媒體查詢
- 附錄1
- HTML5+CSS3整站開發
- 前端開發規范
- 規范目的
- 命名規則
- HTML開發規范
- CSS開發規范
- SCSS開發規范
- JavaScript開發規范
- JavaScript基礎
- JavaScript簡介
- JavaScript的發展歷史
- JavaScript是前臺語言
- 用法
- 認識語句和符號
- JavaScript輸出
- JavaScript注釋
- 體驗js輸出
- JavaScript 變量
- JavaScript 數據類型
- JavaScript數據類型的轉換
- JavaScript運算符
- JavaScript流程控制語句
- 前端庫
- 百度靜態資源公共庫
- 前端資源
- 學習網站類