聊聊JavaScript的誕生javascript
JavaScirpt鼻祖:Bremdan Eich(布蘭登·艾奇),JavaScript的誕生於瀏覽器的鼻祖網景公司(Netscape),發佈了Navigator瀏覽器0.9版,這是一款很經典的瀏覽器,網景公司(Netscape)的用戶數所以而出現了井噴的態勢,可是Navigator0.9不具有和訪問者互動的能力,在那個上網速度比蝸牛還慢的時代,網景公司(Netscape)急需一種腳本語言,使得瀏覽器和網頁進行交互,從而提高用戶的體驗。css
SO,Bremdan Eich(布蘭登·艾奇)正好入職了網景公司被任命爲設計師,當時公司要求很簡單要和java很像可是比java簡單你去借鑑他吧,可是這個哥們的興趣是函數時編程java是面向對象變成,這哥們一點都不喜歡java,因此花了10天設計了JavaScript悲劇就這麼誕生了。畢竟神創造世界也不是一蹴而就的,Bremdan Eich(布蘭登·艾奇)可是畢竟是大神啊10天設計了一門語言,可是細節考慮的問題,起初開發人員用的死去活來的,知道Ajax的誕生人們纔有了接受JavaScript的各類痛點的理由html
總的來講啊,Brendan Eich設計思路是這樣的:java
因此,JavaScript語言其實是兩種語言風格的混合產物(簡化的)函數式編程+(簡化的)面向對象編程。這是由Brendan Eich(函數式編程)與網景公司(面向對象編程)共同決定的。程序員
無論怎麼說,JavaScript和Java是有關係的,JavaScript裏面有Java的思想。因此說JavaScript和Java無關是不正確的。算法
其實一直到如今Brendan Eich仍是看不起討厭Java。假如不是公司決策Brendan Eich絕對不會把Java做爲JavaScript的設計原型,即便是如今,Brendan Eich仍是討厭本身的做品。他曾經說過:「與其說我愛JavaScript,不如說我恨它。它是C語言和Self語言的產物。十八世紀英國文學家約翰遜博士說得好:'它的優秀之處並不是原創,它的原創之處並不優秀。」chrome
一、什麼是JavaScript引擎編程
JavaScript解析引擎就是可以「讀懂」JavaScript代碼,並準確地給出代碼運行結果的一段程序。windows
學過編譯原理的人都知道,對於靜態語言來講(如Java、C++、C),處理上述這些事情的叫編譯器(Compiler),相應地對於JavaScript這樣的動態語言則叫解釋器(Interpreter)。這二者的區別用一句話來歸納就是:編譯器是將源代碼編譯爲另一種代碼(好比機器碼,或者字節碼),而解釋器是直接解析並將代碼運行結果輸出。 瀏覽器
可是,如今很難去界定說,JavaScript引擎它到底算是個解釋器仍是個編譯器,由於,好比像V8(Chrome的JS引擎),它其實爲了提升 JS的運行性能,在運行以前會先將JS編譯爲本地的機器碼(native machine code),而後再去執行機器碼(這樣速度就快不少),相信你們對JIT(Just In Time Compilation)必定不陌生吧。
我我的認爲,不須要過度去強調JavaScript解析引擎究竟是什麼,瞭解它究竟作了什麼事情我我的認爲就能夠了。對於編譯器或者解釋器到底是如何看懂代碼的,翻出大學編譯課的教材就能夠了。
這裏還要強調的就是,JavaScript引擎自己也是程序,代碼編寫而成。好比V8就是用C/C++寫的。
MARK:
語言自己是一個標準,具體的語言的實現,好比C源碼實現其實就是這個標準的實現和定義,咱們經過標準來寫代碼,最終展示形式:都須要轉換爲機器可識別的指令「機器碼」
二、JavaScript引擎和ECMAScript又是什麼關係呢?
簡單來講就是你你要去用一門語言解析另外一門語言的時候,你須要一個標準,也就是人們常說的你憑什麼!
有了ECMAScript就等於有了衡量的標準,JavaScript引擎就能夠根據這個標準去解析JavaScript代碼了。那麼這裏的 ECMAScript就是定義了這些規則。其中ECMAScript 262這份文檔,就是對JavaScript這門語言定義了一整套完整的標準。其中包括:
var,if,else,break,continue等是JavaScript的關鍵詞
abstract,int,long等是JavaScript保留詞
怎麼樣算是數字、怎麼樣算是字符串等等
定義了操做符(+,-,>,<等)
定義了JavaScript的語法
定義了對錶達式,語句等標準的處理算法,好比遇到==該如何處理
⋯⋯
標準的JavaScript引擎就會根據這套文檔去實現,注意這裏強調了標準,由於也有不按照標準來實現的,好比IE的JS引擎。這也是爲何JavaScript會有兼容性的問題。至於爲何IE的JS引擎不按照標準來實現,就要說到瀏覽器大戰了。
三、JavaScript引擎和瀏覽器之間的關係
簡單地說,JavaScript引擎是瀏覽器的組成部分之一。由於瀏覽器還要作不少別的事情,好比解析頁面、渲染頁面、Cookie管理、歷史記錄 等等。那麼,既然是組成部分,所以通常狀況下JavaScript引擎都是瀏覽器開發商自行開發的。好比:IE9的Chakra、Firefox的 TraceMonkey、Chrome的V8等等。
從而也看出,不一樣瀏覽器都採用了不一樣的JavaScript引擎。所以,咱們只能說要深刻了解哪一個JavaScript引擎。
歷史能夠追溯至1990年代後期微軟與Netscape的「瀏覽器大戰」,雙方爲在JavaScript與JScript一決生死,因而大規模的賦予瀏覽器強大的功能。微軟在網頁技術上加入了很多專屬事物,計有VBScript、ActiveX、以及微軟自家的DHTML格式等,使很多網頁使用非微軟平臺及瀏覽器沒法正常顯示。這個時候萬維網聯盟出來了,說我來制定一個統一的標準,大家瀏覽器按照這個標準來,這個一個頁面在不一樣的瀏覽器就都能正常顯示了,比方說W3C定義了 這個標識符是存放圖片的,chrome,ie,火狐..等等瀏覽器內核就將定義成顯示圖片,要是沒有W3C制定標準,每一個瀏覽器對圖片定義不一樣的標籤,那針對每一個瀏覽器要寫不一樣的代碼,這個確定是行不通的;
看上面的圖W3C組織就出來了,來我給大家一套統一的渲染標準大家經過這個來渲染頁面,也就是咱們上面圖的BOM他規定了如何渲染頁面、操做頁面等頁面相關的操做。
DOM:是一個標準協議,你們都按照這個標準來去渲染頁面操做頁面
BOM:Browser Object Mode的縮寫瀏覽器中不少操做都是經過JavaScript控制的,每一個瀏覽器都不一樣可是都是大同小異的
BOM對象中的windows中包含了不少對瀏覽器的操做:好比瀏覽器定位導航、瀏覽器信息、對話框、等,固然也包含Document對象DOM對象包含了各標籤的對象和屬性,來生成html頁面、
舉個很是NICE的例子:
DOM,瀏覽器,HTML,javasript,css之間的關係能夠理解成;一個畫家(程序員)用畫筆(javascript)畫了個畫(DOM),接着打印機(瀏覽器)打印,在打印過程當中加上彩墨(css),最終一張漂亮好看的一張紙(html)就展現在你們面前
原理是什麼呢?
瀏覽器拿到這個html後開始進行渲染,每一個頁面都會生成一個BOM對象,BOM對象中包含了瀏覽器的操做對象信息還有DOM對象,而後瀏覽器開始進隊DOM對象在瀏覽器中展現並加載CSS最終展現在瀏覽器頁面中一個完整的HTML
補充
BOM和瀏覽器的關係是包含關係BOM包含DOM,由於渲染部分大體都相同因此容易標準化W3C就把能夠抽離出來的渲染和操做部分進行了標準化DOM~
關於JavaScript誕生趣事:http://www.cnblogs.com/xiaoyang002/p/4137975.html