ECMAScript
1997 年歐洲計算機制造商協會 39 號技術委員會制定了ECMA-262標准(別名 ECMAScript),而瀏覽器只是負責實現,ie瀏覽器實現的結果是jscript,遠景瀏覽器實現的是javascript,其它瀏覽器這個時候還處於受精狀態。
所以ECMAScript的版本和javascript和jscript版本並不一定一致。
tip:
1、ECMAScript標准是受javascript影響而誕生的,是javascript那幫人提交的提案給的ECMA協會的,等協會標准出台時,javascript都更新到1.1了,jscript也誕生了。所以,javascript和jscript早於ECMAScript標准
2、不要看現在的ECMAScript6挺火的,什么模塊,類及其繼承。在es4就出來了。只不過出生的太早,時機未到,就在公開的前一天被扼殺了。后來在原來es3的基礎上修改了點東西,內部叫做es3.1,正式發布更名為es5,就是現在當前(2017)瀏覽器實現的主流標准。
說到es6,不得不說目前個大瀏覽器實現(es6協議)太慢了,es7都出來了,es6支持還捉襟見肘
Dom
W3C即萬維網聯盟是另個一個標准協議---Dom標准(網頁對象模型,事件、節點、樣式)。
IE 瀏覽器4 和遠景瀏覽器4在開發頁面上方面各持己見,為了方便開發人員統一開發,1998年W3C制定了Dom標准
Bom
而Bom則一直沒有被標准化,直到html5,才被w3c寫入規范
其它
瀏覽器內核---用於排版html布局的引擎:熟知的有Trident內核(ie使用)、Webkit內核(早期chrome使用)、Gecko內核(fireFox使用)、Presto內核(Opera使用)...
js引擎---用於運行高性能js的編譯器:普通js是不需要編譯的就直接可以被瀏覽器解釋執行,但是總有些不安分的瀏覽器,為了性能,搞出了個js界編譯器,將js部分編譯成字節碼文件,好讓瀏覽器內置的js解釋器快速執行。因為js解釋器一般是用c++、java寫的,他們執行字節碼文件更快。如v8引擎(chrome、nodejs在用)、SpiderMonkey引擎(fireFox在用)
如果你了解java,我就用java語言去對比
js解釋器,就類似於java的JVM,都是負責執行代碼的。
js的引擎,就類似於java的javac,負責編譯成二進制的字節碼文件的
瀏覽器均內置js解釋器(不要轉牛角尖,我說的是在js發明之后)、但是只有牛逼的瀏覽器才內置js引擎
另外瀏覽器對dom渲染和js解釋執行有關系,
一方面,js執行會影響到dom的渲染,所以建議js代碼放到頁面的最下邊
另一方面,而js去動態操作dom元素的時候,如果js放在上邊,可能捕獲不到dom元素,因為此時dom元素可能還沒有渲染完
所以綜上所述,都應該把js放到頁面的底部,或者加上onload事件等等
關於js的面向對象
js原型與原型鏈,js是基於原型的面向對象語言(java是基於class的面相對象語言)
關於js的閉包
一個是為了防止變量作用於的污染,另一個是為了方便內部函數取外部函數的值(等同於Java的內部類)
還有重要的一點是:對於ECMAScript標准的實現,除了ie的jscript和遠景的javascript,其它瀏覽器均沒有專門為其實現起名字,比如360明明可以起一個名字叫360script,遨游可以起一個叫遨游script,但是!!!他們很多瀏覽器連內核都用谷歌和火狐的,你認為ECMAScript標准他們願意親自去實現?!而且ie實現了,又干不過遠景的實現javascript。所以,現在各大瀏覽器的實現,對ECMAScript標准的支持,一般都叫javascript,即js,沒必要死扣這一點
電子書推薦
JavaScript高級程序設計(第3版):http://pan.baidu.com/s/1i5LybIX
ECMA-262-5.1中文版:http://pan.baidu.com/s/1pKXMNiz