diff --git a/part-4.md b/part-4.md index 01cb1bd..472e843 100644 --- a/part-4.md +++ b/part-4.md @@ -44,7 +44,7 @@ ES3.1 的开发在 2008 年 1 月的 TC39 会议上正式启动。这次会议 图 30. 2008 年 ES3.1 WG 会议的经常性参与者。 -在最早的讨论主题 [[TC39 2008d](./references.md#tc39:2008:013)] 里,其中有一个主题是评估 ES3.1 的总体目标,以及在解决问题和添加新特性时所应遵循的设计准则。对此,微软 Live 团队开发者和其他一些 Web 框架开发者所主张的早期立场,是避免使用任何可能导致脚本「无法在现有或旧版浏览器上解析」的新语法扩展。但这种「不允许新语法」的规则带来了过多的限制,忽视了多种浏览器已经具备某些语法扩展的事实。这个讨论的成果,是基于四种最知名的浏览器(IE、Firefox、Opera 和 Safari)而得出的「四人三票」(3 out of 4)规则,这些浏览器在微软的 JScript 偏差文档中都已经被分析过了。当四种浏览器中有三种在某特性上达成了一致或具备共通行为时,ES3.1 规范就应该以此为准。这条规则引发了关于「ES3.1 应如何处理浏览器互操作性问题」的广泛讨论。 +在最早的讨论主题 [[TC39 2008d](./references.md#TC39:2008:013)] 里,其中有一个主题是评估 ES3.1 的总体目标,以及在解决问题和添加新特性时所应遵循的设计准则。对此,微软 Live 团队开发者和其他一些 Web 框架开发者所主张的早期立场,是避免使用任何可能导致脚本「无法在现有或旧版浏览器上解析」的新语法扩展。但这种「不允许新语法」的规则带来了过多的限制,忽视了多种浏览器已经具备某些语法扩展的事实。这个讨论的成果,是基于四种最知名的浏览器(IE、Firefox、Opera 和 Safari)而得出的「四人三票」(3 out of 4)规则,这些浏览器在微软的 JScript 偏差文档中都已经被分析过了。当四种浏览器中有三种在某特性上达成了一致或具备共通行为时,ES3.1 规范就应该以此为准。这条规则引发了关于「ES3.1 应如何处理浏览器互操作性问题」的广泛讨论。 人们一致认为,ES3.1 的首要原则是「不要破坏 Web」,亦即确定出有哪些语言变更会改变现有「已与主流浏览器相兼容的」网页的行为。但是现存的网页已有数以亿计,它们实际上依赖了 ECMAScript 规范中的哪些部分呢?对规范的哪些改动会破坏 Web 呢?有一则来自浏览器实现者的趣闻,认为由于现有网页的庞大基数,任何兼容的浏览器特性(不论用法多晦涩或令人难以置信)都可能被某些现存的页面使用。基于这种观点,在所有四种主流浏览器中共通的特性不应被更改,而四种浏览器中有三种支持的特性则很有望被标准化。但对于那些四种浏览器中只有两种支持,或在所有浏览器中都不同的特性和行为,又该怎么办呢?显然,这类特性和行为对于现有的可交互 Web 并非必需,并且还可能会在标准化过程中被进一步修改。 @@ -569,7 +569,7 @@ Dave Herman 向委员会建议,认为委员会应该采用一种名为「倡 #### 开始编写规范 作为项目编辑,Allen Wirfs-Brock 全权负责根据 TC39 倡导者开发的 Harmony 提案,来创建 ES.next 规范文档。在微软,他的职责被分散在 TC39 相关工作与其他项目之间。2010 年 12 月,他离开微软加入 Mozilla,专注于 ES Harmony。 -ES4 和 ES5 的经验使 Wirfs-Brock 明白,持续不断地对具体规范文档的开发,是完成新版标准的关键。2011 年 6 月 22 日,他怀着坚定的决心打开了最近完成的 ES5.1 规范的源文件,将封面页改为「第 6 版草案」,并将其保存为基准 ES6 规范草案。然后,他立即开始根据 5 月份的特性分类与委员会两年来做出的其他决定,在草案中编辑新材料。7 月 12 日,他发布了「ES.next 规范的第一份工作草案」[[Wirfs-Brock et al. 2011a](./references.md#es6draft1), [b](./references.md#TC39:2011:032)]。图 41 是该草案的变更摘要。这是委员会发布的 38 份草案中的第一份,最后一份草案则于 2015 年 4 月 14 日发布到了 Wiki 上 [[Wirfs-Brock et al. 2015a](./references.md#ES6draft38), [c](./references.md#TC39:2015:030)]。 +ES4 和 ES5 的经验使 Wirfs-Brock 明白,持续不断地对具体规范文档的开发,是完成新版标准的关键。2011 年 6 月 22 日,他怀着坚定的决心打开了最近完成的 ES5.1 规范的源文件,将封面页改为「第 6 版草案」,并将其保存为基准 ES6 规范草案。然后,他立即开始根据 5 月份的特性分类与委员会两年来做出的其他决定,在草案中编辑新材料。7 月 12 日,他发布了「ES.next 规范的第一份工作草案」[[Wirfs-Brock et al. 2011a](./references.md#ES6draft1), [b](./references.md#TC39:2011:032)]。图 41 是该草案的变更摘要。这是委员会发布的 38 份草案中的第一份,最后一份草案则于 2015 年 4 月 14 日发布到了 Wiki 上 [[Wirfs-Brock et al. 2015a](./references.md#ES6draft38), [c](./references.md#TC39:2015:030)]。 * `5.1.4` 引入补充语法的概念。 * `5.3` 引入静态语义规则的概念。 @@ -1251,7 +1251,7 @@ x => x /* 一个 identity 函数 */ 与其他函数定义形式不同的是,箭头函数不会重新绑定 `this` 和其他函数作用域内的隐式绑定。这使得箭头函数在「内层函数需访问其外层函数的隐式绑定」的情况下,显得非常方便。 -设计箭头函数的主要动机,在于开发者经常需要编写冗长的函数表达式,以此作为平台和库 API 函数的回调参数。在 JavaScript 1.8 中,Mozilla [[2008b](./references.md#moz:new1.8)] 实现了[98](./notes.md#98)「表达式闭包」,它保留了对`function` 关键字的使用,允许使用无括号的单个表达式体。TC39 讨论了一些类似但较短小的表示法,用诸如 𝜆、*f*、\ 或 # 等符号 [[Eich 2010b](./references.md#eich:bikeshed); [TC39 Harmony 2010c](./references.md#Harmony:shorterfuncs)] 来代替函数,但未能就其中任何一种方法达成共识。 +设计箭头函数的主要动机,在于开发者经常需要编写冗长的函数表达式,以此作为平台和库 API 函数的回调参数。在 JavaScript 1.8 中,Mozilla [[2008b](./references.md#moz:new1.8)] 实现了[98](./notes.md#98)「表达式闭包」,它保留了对`function` 关键字的使用,允许使用无括号的单个表达式体。TC39 讨论了一些类似但较短小的表示法,用诸如 𝜆、*f*、\ 或 # 等符号 [[Eich 2010b](./references.md#Eich:bikeshed); [TC39 Harmony 2010c](./references.md#Harmony:shorterfuncs)] 来代替函数,但未能就其中任何一种方法达成共识。 TC39 [[Herman 2008](./references.md#Herman:lambdas)] 同时也对提供具有精简语义的「lambda 函数」感兴趣,比如支持*消栈的尾调用*[g](./appendices.md#proper-tail-call)和 Tennent [[1981](./references.md#tennent1981principles)] 一致性原则[99](./notes.md#99)。其支持者们认为,这样的函数将会在实现由语言或库所定义的控制抽象时有所用处。在 Harmony 进程早期,Brendan Eich [[2008a](./references.md#Eich:allenslambda)] 在 `es-discuss` 上的一篇讨论贴中, 提出了一个最初由 Allen Wirfs-Brook 所提出的建议,即基于 Smalltalk 块语法的启发,采用一种简洁的 lambda 函数语法。例如 `{|a,b| a+b}` 就相当于 Herman 的 `lambda(a,b){a+b}`。Eich 的帖子引发了一场大规模但没有结论的线上讨论,话题涉及与(某种可能的)简明函数特性所相关的方方面面。作为关键总结,可以认为其中许多语法的灵感会带来解析或可用性上的问题,而且 JavaScript 的非本地控制转移语句——`return`、`break` 和 `continue`——会显著地使编写控制抽象的机制变得更加复杂。大多数 TC39 成员和 `es-discuss` 订阅者似乎主要对简洁的函数语法更感兴趣,而非对 Tennent 一致性感兴趣。