目录
请支持本书:购买 (PDF, EPUB, MOBI)捐赠
(广告,请勿屏蔽。)

1. ECMAScript 特性的 TC39 流程

本章解释了所谓的 *TC39 流程*,它规定了从 ECMAScript 2016 (ES7) 开始,ECMAScript 特性是如何设计的。

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 以及对语义和算法的讨论来描述解决方案。最后,必须确定提案的潜在障碍,例如与其他特性的交互和实现挑战。在实现方面,需要 polyfill 和演示。

**接下来是什么?** 通过接受阶段 1 的提案,TC39 宣布愿意审查、讨论该提案并为其做出贡献。展望未来,预计该提案将发生重大变化。

1.2.2.3 阶段 2:草案

**它是什么?** 将包含在规范中的第一个版本。此时,该特性很可能会最终包含在标准中。

**需要什么?** 现在,该提案必须另外包含对该特性的语法和语义的正式描述(使用 ECMAScript 规范的正式语言)。描述应尽可能完整,但可以包含待办事项和占位符。需要该特性的两个实验性实现,但其中一个可以在 Babel 等转译器中。

**接下来是什么?** 从现在开始,预计只会进行增量更改。

1.2.2.4 阶段 3:候选

**它是什么?** 提案基本完成,现在需要来自实现和用户的反馈才能进一步推进。

**需要什么?** 规范文本必须完整。指定的审阅者(由 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