-
Notifications
You must be signed in to change notification settings - Fork 8
Description
理解ECMAScript和JavaScript的关系
ECMA
ECMA国际(Ecma International)是一家国际性会员制度的信息和电信标准组织。1994年之前,名为欧洲计算机制造商协会(European Computer Manufacturers Association)。因为计算机的国际化,组织的标准牵涉到很多其他国家,因此组织决定改名表明其国际性。现名称已不属于首字母缩略字。
ECMA国际负责了很多标准的制定:
- CD-ROM格式(之后被国际标准化组织批准为ISO 9660)
- C#语言规范
- C++/CLI语言规范
- 通用语言架构(CLI)
- ECMAScript语言规范(JavaScript)
- Eiffel语言
- 电子产品环境化设计要素
- Universal 3D标准
- OOXML
- Dart语言规范
ECMAScript
1994年,Netscape 发布了 Navigator0.9,但是因为那个时候的浏览器缺乏和用户有良好交互的能力。所以 Netscape 急切渴望一门可以在浏览器中运行,可以提供一定用户交互的语言。
1995年,Netscape 公司的 Brendan Eich开发了 JavaScript 语言。
1996 年 11 月, Netscape 公司决定将 JavaScript 提交给标准化组织 ECMA,希望这种语言能够成为国际标准。
1997 年 7 月,ECMA 发布 262 号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为 ECMAScript,这个版本就是 1.0 版。
所以说ECMAScript是一门脚本程序设计语言标准,当然其实现也不只有JavaScript这一种,比如以下语言也是ECMAScript标准的实现:
- Ejscript
- JScript .NET
- ActionScript
- DMDScript
- CriScript
- InScript
TC39
TC(Technical Committees),代表技术委员会。在ECMA国际,每个标准都会有一个 TC 来负责,而负责 ECMA262标准,即 ECMAScript 的,就是 TC39。
关于ECMAScript的提案可以在TC39的Github仓库中查看:https://github.com/tc39/proposals。
ECMAScript6
2015年6月,ECMAScript 6,也就是 ECMAScript 2015 发布。
从 ECMAScript 6 开始,标准有了新的,更加规范化和快速的制定流程。面对着每年一次的,频繁的标准更替,再采用1234的版本号来标注规范显得不太合适。所以从 ECMAScript 6 开始,就开始采用年号来做版本。即 ECMAScript 2015。
现在所提到的ECMAScript6则是泛指ECMAScript 2015及之后的版本。
规范制定流程
在新的规范制定流程中,要求成文标准要从事实标准中诞生,实现先于标准存在。
具体流程规范详见 https://tc39.es/process-document/。
每个新特性,从开始到完成一共要经历5个阶段。
stage0 - strawman(稻草人)阶段
任何人都可以提交pull request到 GitHub - tc39/ecma262: Status, process, and documents for ECMA262,可以是一个提议,想法,初步描述。
stage1 - proposal(提案)阶段
- TC39制定成员作为 champion
- TC39审阅通过
- 有实现的 Demo 或者 Polyfill
- 初步描写标准的语义语法算法复杂度解决的问题等
stage2 - Draft(草案)阶段
- 至少2个实现,可以为实验性实现
- ECMAScript spec editor 通过审核
- TC39 review 通过
- 文本编写完成
stage3 - Candidate(候选)阶段
- 至少2个实现,可以为实验性实现
- ECMAScript spec editor 通过审核
- TC39 review 通过
- 文本编写完成
stage4 - Finished(完成)阶段
- 编写 test 262 测试用例
- 通过两个实现该特性的内核测试
- ECMAScript spec editor 通过审核
- 开发者表示支持和认可
JavaScript
- JavaScript 是 ECMAScript 语言标准的一种实现
- JavaScript 有浏览器、Node.js 等多种宿主环境,是一种日常的通称,各种宿主所扩充的 API 有差异,比如浏览器有 各种
Dom API和Web API,而 Node.js 有process,这些在统一语法规范 ECMAScript 中没有规定