ECMA、ECMAScript、javascript、ES6、JavaScript 引擎、宿主環(huán)境、Babel 等概念
- ECMA: Ecma International,一個(gè)為科學(xué)技術(shù)制定標(biāo)準(zhǔn)的組織。
- ECMAScript(即 ECMA-262): 由 Ecma 國(guó)際發(fā)布的標(biāo)準(zhǔn),它包含通用目的的腳本語(yǔ)言(如 javascript)的規(guī)范。
- 腳本語(yǔ)言: 一種專門為在一種存在的實(shí)體或系統(tǒng)(JavaScript 運(yùn)行時(shí)(即宿主環(huán)境))上操作而設(shè)計(jì)的編程語(yǔ)言。如 javaceript
- JavaScript: 一種通用目的的腳本語(yǔ)言,遵循 ECMAScript 規(guī)范,它是 ECMAScript 語(yǔ)言的一個(gè)分支版本。有點(diǎn)“ECMAScript 語(yǔ)言衍生出的方言”的意思。JavaScript 實(shí)現(xiàn)了多數(shù) ECMA-262 中描述的 ECMAScript 規(guī)范,但存在少數(shù)差異。
- JavaScript 引擎(JavaScript 解釋器,JavaScript 的實(shí)現(xiàn)): 能夠理解和執(zhí)行 JavaScript 代碼的程序或解釋器。通??梢栽?web 瀏覽器中,包括 Chrome 中的 V8 ,火狐中的 SpiderMonkey ,以及 Edge 中的 Chakra ,每款引擎就像是一個(gè)用于其應(yīng)用程序的語(yǔ)言模塊,可以讓其支持某種 JavaScript 語(yǔ)言的分支。
- 瀏覽器性能的差異: 體現(xiàn)在 JavaScript 引擎實(shí)現(xiàn)起來效率的差異,效率越高而運(yùn)行越快。
- 瀏覽器支持的差異: 通常是指該瀏覽器支持哪個(gè)版本的 ECMAScript,或者說該瀏覽器支持哪些 ECMAScript 功能。ECMASCript 兼容性列表是回答這類問題的絕佳答案參考。
- JavaScript 運(yùn)行時(shí)(宿主環(huán)境): 提供 JavaScript 代碼運(yùn)行所在的環(huán)境,并為 JavaScript 引擎所解釋。
視窗和文檔對(duì)象并非真正的核心 JavaScript 語(yǔ)言的一部分。它們是 Web APIs ,即扮演著 JavaScript 宿主環(huán)境的瀏覽器所提供的對(duì)象。對(duì)于服務(wù)器端來說,JavaScript 運(yùn)行時(shí)是 Node.js 。服務(wù)器相關(guān)的宿主對(duì)象,如文件系統(tǒng)、處理和請(qǐng)求都在 Node.js 中被提供。
有趣的是:不同的 JavaScript 運(yùn)行時(shí)可以分享同樣的 JavaScript 引擎。例如 V8 ,是既為 Google Chrome 也為 Node.js 所用的 JavaScript 引擎—兩個(gè)截然不同的環(huán)境。
- ECMAScript 6(即 ES6、ES2015 或 ECMAScript 2015): 它是 ECMA-262 標(biāo)準(zhǔn)的第六個(gè)版本,其特點(diǎn)是對(duì) ECMAScript 規(guī)范有著顯著的變化和改進(jìn)。
- Babel: 將 ES6 代碼轉(zhuǎn)換為 ES5 代碼的轉(zhuǎn)譯器。(主要因?yàn)椴煌瑸g覽器對(duì) ES6 規(guī)范支持程度不一樣導(dǎo)致,粗略低講是不同瀏覽器的兼容性問題)
趣聞: 有一段關(guān)于 JavaScript 混淆不清的歷史是它是于1996年被開發(fā)出來的。然后在1997年被提交給 ECMA 國(guó)際用于標(biāo)準(zhǔn)化工作,這導(dǎo)致了 ECMAScript 的誕生。同時(shí),由于 JavaScript 與 ECMAScript 規(guī)范保持一致,所以可以說 JavaScript 是根據(jù) ECMAScript 所實(shí)現(xiàn)的一個(gè)例子。令我們感到有趣的是:ECMAScript 是基于 JavaScript 的,而同時(shí) JavaScript 又是基于 ECMAScript 的。到底是先有雞呢,還是先有蛋呢?
ECMAJavascript.png
