目錄
請支持本書:購買(PDF、EPUB、MOBI)捐款
(廣告,請勿封鎖)

1. TC39 處理 ECMAScript 功能

本章說明所謂的TC39 程序,它規範 ECMAScript 功能的設計方式,從 ECMAScript 2016 (ES7) 開始。

1.1 誰設計 ECMAScript?

答案:TC39(技術委員會 39)。

TC39是負責 JavaScript 演進的委員會。其成員是公司(包括所有主要瀏覽器供應商)。TC39 定期開會,其會議由成員派出的代表和受邀專家參加。會議記錄可在線上取得,能讓您清楚了解 TC39 的運作方式。

有時(甚至在本書中),您會看到術語TC39 成員指的是一個人。這表示:由 TC39 成員公司派出的代表。

值得注意的是,TC39 透過共識運作:決策需要絕大多數同意,且沒有人強烈反對到否決的程度。對許多成員來說,協議會帶來真正的義務(他們必須實作功能等)。

1.2 ECMAScript 如何設計?

1.2.1 問題:ECMAScript 2015 (ES6) 的版本太大

ECMAScript 的最新版本 ES6 很龐大,且在 ES5 之後將近 6 年才標準化(2009 年 12 月相較於 2015 年 6 月)。在版本之間經過這麼長的時間,有兩個主要問題

因此,從 ECMAScript 2016 (ES7) 開始,版本發布會更頻繁,因此規模也會小很多。每年會發布一個版本,且會包含在年度截止日期前完成的所有功能。

1.2.2 解決方案:TC39 程序

每個 ECMAScript 功能的提案都會經歷以下的成熟階段,從第 0 階段開始。從一個階段進展到下一個階段必須得到 TC39 的批准。

1.2.2.1 第 0 階段:稻草人

是什麼?一種自由形式的提交方式,用於提交讓 ECMAScript 進化的想法。提交必須來自 TC39 成員或已 註冊為 TC39 貢獻者 的非成員。

需要什麼?文件必須在 TC39 會議中審閱(來源),然後新增到 第 0 階段提案頁面

1.2.2.2 第 1 階段:提案

是什麼?該功能的正式提案。

需要什麼?必須找出一個所謂的擁護者,負責該提案。擁護者或共同擁護者必須是 TC39 的成員(來源)。提案解決的問題必須用散文描述。解決方案必須透過範例、API 以及語意和演算法的討論來描述。最後,必須找出提案的潛在障礙,例如與其他功能的互動和實作挑戰。在實作方面,需要多重載入和示範。

接下來是什麼?透過接受第 1 階段的提案,TC39 宣告願意審查、討論和為提案做出貢獻。未來預期會對提案進行重大變更。

1.2.2.3 第 2 階段:草稿

是什麼?規範中內容的第一個版本。在這個階段,該功能最終納入標準的可能性很大。

需要什麼?現在提案還必須正式描述該功能的語法和語意(使用 ECMAScript 規範的正式語言)。描述應盡可能完整,但可以包含待辦事項和佔位符。需要該功能的兩個實驗性實作,但其中一個可以使用 Babel 等轉譯器。

接下來是什麼?從現在開始只預期會進行增量變更。

1.2.2.4 第 3 階段:候選

是什麼?提案已大致完成,現在需要實作和使用者的回饋才能進一步進展。

需要什麼?規格文字必須完整。由 TC39 指定的審查員(由 TC39 指定,而非擁護者)和 ECMAScript 規格編輯者必須簽署規格文字。必須至少有兩個符合規格的實作(不一定要預設啟用)。

接下來是什麼?從此以後,變更應僅針對實作及其使用提出的重大問題做出回應。

1.2.2.5 第 4 階段:完成

是什麼?提案已準備好納入標準。

需要什麼?在提案達到此階段之前,需要以下事項

接下來是什麼?提案將盡快包含在 ECMAScript 規範中。當規範通過其每年的標準批准時,提案將作為其中的一部分獲得批准。

1.3 別稱呼它們為 ECMAScript 20xx 功能

如您所見,您只能在提案達到第 4 階段後確定某個功能將包含在標準中。然後,它包含在下一版 ECMAScript 中的可能性很大,但也不是 100% 確定(可能需要更長的時間)。因此,您不能再稱呼提案為(例如)「ES7 功能」或「ES2016 功能」。因此,我最喜歡的兩種類型文章和部落格文章標題寫法是

如果提案處於第 4 階段,我會稱呼它為 ES20xx 功能,但最安全的方法是等到規範編輯器確認它會包含在哪些版本中。Object.observe 是 ECMAScript 提案的範例,它已進展到第 2 階段,但最終被撤回。

1.4 進一步閱讀

以下是此章節的重要來源

其他閱讀事項

下一篇:2. 常見問題:ES2016 和 ES2017