1.7 ECMAScript 简史
本节叙述了发展到 ECMAScript 6 的过程中所发生的事情。
1.7.1 早些年:ECMAScript 1–3
- ECMAScript 1 (1997年6月)是 JavaScript 语言规范的第一个版本。
- ECMAScript 2 (1998年6月)包含了一些小的变化,为了使规范与独立的 JavaScript ISO 标准保持同步。
- ECMAScript 3 (1999年12月)引入了很多特性,已经成为语言的流行部分。
1.7.2 ECMAScript 4 (在2008年6月被抛弃)
在1999年 ES3 发布之后,就开始了 ES4 的制定工作。在2003年,发布了一份临时报告,在这之后 ES4 的制定工作就暂停了。 Adobe 的 ActionScript 和微软的 JScript.NET 实现了临时报告中所描述语言的子级。
在2005年2月, Jesse James Garrett 发现新技术变得流行起来,被用于实现动态的使用 JavaScript 的前端 app 。他称呼这些技术为 Ajax 。 Ajax 开启了 web app 的全新世界,并使人们对 JavaScript 产生了浓厚的兴趣。
这使得 TC39 在2005年秋天重启 ES4 的制定工作。他们基于 ES3 来制定 ES4 ,临时的 ES4 在 ActionScript 和 JScript.NET 中实现。
当时有两个组从事制定未来 ECMAScript 版本的工作:
- ECMAScript 4 由 Adobe , Mozilla , Opera 和 Google 设计,是一个很大的升级。它包含的特性集如下:
- 大型编程(类,接口,命名空间,包,程序单元,可选的类型注释,可选的静态类型检测和验证)
- 编程和脚本的进化(结构类型,鸭子类型,类型定义,和方法重载)
- 数据结构完善(参数化类型, getter 和 setter ,和元级的方法)
- 控制抽象(恰当的尾递归,迭代器,和生成器)
- 反思(类型元对象和堆栈标记)
- ECMAScript 3.1 由微软和 Yahoo 设计。计划成为 ES4 的子集,并且是 ECMAScript 3 的增量化升级,没有 bug 修复和小的新特性。 ECMAScript 3.1 最终成为了 ECMAScript 5 。
这两个组关于 JavaScript 未来产生了分歧,他们之间的紧张局势也逐渐升级。
本节来源:
《 Proposed ECMAScript 4th Edition – Language Overview 》,2007-10-23 《 ECMAScript Harmony 》,作者 John Resig ,2008-08-13
1.7.3 ECMAScript Harmony
2008年7月底,TC39 在 Oslo 开了个会, Brendan Eich 描述会议结果如下:
JavaScript 标准正文不是秘密, Ecma 的技术委员会39已经分裂超过一年了,一些成员喜欢 ES4 [...] ,一些成员倡导 ES3.1 [...] 。现在,我很高兴地说,分裂结束了。
会议就四点上达成了一致:
- 1、开发一个增量升级的 ECMAScript (就是 ECMAScript 5 )。
- 2、开发一个主要的新版本,相对于 ES4 更加现代化,但是在范围上比 ECMAScript 3 之后的版本大得多。这个版本代号为 Harmony ,名字源于会议要达成的消除分歧的目标。
- 3、来自于 ECMAScript 4 的特性被取消了一部分:包,命名空间,早绑定。
- 4、其他想法在 TC39 达成一致后才开发。
因此: ES4 小组同意不让 Harmony 像 ES4 那么激进,剩下的 TC39 成员赞成继续推进。
接下来的 ECMAScript 版本是:
- ECMAScript 5 (2009年12月)。这是目前大多数浏览器实现的 ECMAScript 版本。它给标准库引入了几处增强,并且通过 严格模式 升级了语言的语义。
- ECMAScript 6 (2015年6月)。该版本经历了几次名字修改:
- ECMAScript Harmony : 是最初的代号,用于 ECMAScript 5 之后的 JavaScript 的改进。
- ECMAScript.next : 很明显, Harmony 的计划对于一次版本升级来说显得太雄心勃勃了,因此它的特性分成了两组:第一组有很高的优先级,成为继 ES5 之后的版本。为了避免过早地涉及到版本号,这个版本的代号就是 ECMAScript.next , ES4 就因为这个产生了很多问题。第二组特性直到 ECMAScript.next 之后才有时间了。
- ECMAScript 6 : 当 ECMAScript.next 成熟之后,它的代号就弃用了,大家都开始称其为 ECMAScript 6 。
- ECMAScript 2015 : 在2014年底, TC39 决定将官方的 ECMAScript 6 名字修改为 ECMAScript 2015 ,根据接下来的每年发布规范的策略。
- ECMAScript 2016 之前被叫做 ECMAScript 7 。开始于 ES2016 ,语言标准将会每年发布一个小的版本。