未验证 提交 2b2c6ba4 编写于 作者: 飞龙 提交者: GitHub

Merge pull request #28 from t532/master

校对:3. JavaScript 的历史和演变
......@@ -2,13 +2,13 @@
> 原文: [http://exploringjs.com/impatient-js/ch_history.html](http://exploringjs.com/impatient-js/ch_history.html)
### 3.1 如何创建 JavaScript
### 3.1 JavaScript 是如何诞生的
JavaScript 由 Brendan Eich 于 1995 年 5 月创建,为期 10 天。 Eich 在 Netscape 工作并为他们的网络浏览器 _Netscape Navigator_ 实现了 JavaScript。
JavaScript 由 Brendan Eich 于 1995 年 5 月创建,工期 10 天。 Eich 在 Netscape 工作并为它的网络浏览器 _Netscape Navigator_ 实现了 JavaScript。
这个想法是 Web 客户端的主要交互部分将用 Java 实现。 JavaScript 应该是这些部分的粘合语言,并且还使 HTML 更具交互性。鉴于它在协助 Java 方面的作用,JavaScript 必须看起来像 Java。这排除了现有的解决方案,如 Perl,Python,TCL 等。
当时,人们认为 Web 客户端的主要交互部分将用 Java 实现。 JavaScript 应该是这些部分的粘合语言,并且可以使 HTML 更具交互性。鉴于它在协助 Java 方面的作用,JavaScript 必须看起来像 Java。这排除了现有的解决方案,如 Perl,Python,TCL 等。
最初,JavaScript 的名称改变了次:
最初,JavaScript 的名称改变了次:
* 它的代号是 _Mocha_ 。
* 在 Netscape Navigator 2.0 测试版(1995 年 9 月)中,它被称为 _LiveScript_ 。
......@@ -21,99 +21,96 @@ JavaScript 有两个标准:
* ECMA-262 由 Ecma International 主持。这是主要标准。
* ISO / IEC 16262 由国际标准化组织(ISO)和国际电工委员会(IEC)主持。这是次要标准。
这些标准描述的语言称为 _ECMAScript_ ,而不是 _JavaScript_ 。选择了另一个名称,因为 Sun(现在的 Oracle)拥有后者名称的商标。“ECMAScript”中的“ECMA”来自主持主要标准的组织。
这些标准描述的语言称为 _ECMAScript_ ,而不是 _JavaScript_ 。使用不同的名称,是因为 Sun(现在的 Oracle)拥有“Java”的商标。“ECMAScript”中的“ECMA”来自主持主要标准的组织。
该组织的原始名称是 _ECMA_ ,_ 欧洲计算机制造商协会 _ 的首字母缩写。后来改为 _Ecma International_ (“Ecma”是一个专有名称,而不是缩写),因为该组织的活动已经扩展到欧洲以外。最初的全帽首字母缩略词解释了 ECMAScript 的拼写。
该组织的原始名称是 _ECMA_ ,_欧洲计算机制造商协会_ 的首字母缩写。后来它改名成了 _Ecma International_ (“Ecma”是一个专有名称,而不是缩写),因为该组织的活动已经扩展到欧洲以外。ECMAScript 的拼写仍然使用全大写的缩写。
原则上,JavaScript 和 ECMAScript 意味着相同的事情。有时,会做出以下区分:
原则上,JavaScript 和 ECMAScript 是同一个东西。但有时,会做出以下区分:
* 术语 _JavaScript_ 指的是语言及其实现。
* 术语 _ECMAScript_ 是指语言标准和语言版本。
因此, _ECMAScript 6_ 是该语言的一个版本(其第 6 版)。
### 3.3 ECMAScript 版本的时间表
### 3.3 ECMAScript 版本的时间表
这是 ECMAScript 版本的简要时间表:
* ECMAScript 1(1997 年 6 月):该标准的第一版。
* ECMAScript 2(1998 年 6 月):小更新,使 ECMA-262 与 ISO 标准保持同步。
* ECMAScript 3(1999 年 12 月):添加了许多核心功能 - “[...]正则表达式,更好的字符串处理,新的控制语句[do-while,switch],try / catch 异常处理,[...]”
* ECMAScript 4(2008 年 7 月放弃):本来是一次大规模的升级(使用静态类型,模块,命名空间等),但最终过于雄心勃勃并将语言划分为管理员。因此,它被放弃了。
* ECMAScript 5(2009 年 12 月):带来了一些小改进 - 一些标准库功能和 [_ 严格模式 _](ch_syntax.html#strict-mode)
* ECMAScript 3(1999 年 12 月):添加了许多核心功能——“[...]正则表达式,更好的字符串处理,新的控制语句[do-while,switch],try / catch 异常处理,[...]”
* ECMAScript 4(2008 年 7 月放弃):本来是一次大规模的升级(使用静态类型,模块,命名空间等),但最终变得过于激进并且导致了阵营分歧。因此,它被放弃了。
* ECMAScript 5(2009 年 12 月):带来了一些小改进——一些标准库功能和 [_严格模式_](ch_syntax.html#strict-mode)
* ECMAScript 5.1(2011 年 6 月):另一项保持 Ecma 和 ISO 标准同步的小更新。
* ECMAScript 6(2015 年 6 月):一个大型更新,履行了 ECMAScript 4 的许多 Promise。这个版本是第一个正式名称 - _ECMAScript 2015_ - 基于发布年份
* ECMAScript 2016(2016 年 6 月):第一次年度发布。与大型 ES6 相比,较短的发布生命周期导致新功能较少。
* ECMAScript 6(2015 年 6 月):一个大型更新,履行了 ECMAScript 4 的许多承诺。这个版本的正式名称是 _ECMAScript 2015_,它是首个基于发布年份的名称
* ECMAScript 2016(2016 年 6 月):第一次年度发布。与 ES6 的全面更新相比,较短的发布生命周期导致新功能较少。
* ECMAScript 2017(2017 年 6 月)。第二次年度发布。
* 随后的 ECMAScript 版本(ES2018 等)在 6 月份获得批准。
* 随后的 ECMAScript 版本(ES2018 等)始终会在 6 月份获得批准。
### 3.4 Ecma 技术委员会 39(TC39)
### 3.4 Ecma 技术委员会 39(TC39)
TC39 是发展 JavaScript 的委员会。严格来说,它的成员是公司:Adobe,Apple,Facebook,Google,Microsoft,Mozilla,Opera,Twitter 等。也就是说,通常是激烈竞争对手的公司正在为了语言的利益而共同努力。
TC39 是发展 JavaScript 的委员会。严格来说,它的成员都是公司:Adobe,Apple,Facebook,Google,Microsoft,Mozilla,Opera,Twitter 等。这些公司通常是激烈的竞争对手,但它们正在为语言的利益而共同努力。
每两个月,TC39 会议由成员任命的代表和受邀专家参加。这些会议的会议记录是公开的,在 [GitHub 存储库](https://github.com/tc39/tc39-notes/)
每两个月,成员任命的代表和受邀专家会参加 TC39 会议。这些会议的记录是公开的,可以在 [GitHub 仓库](https://github.com/tc39/tc39-notes/)中看到
### 3.5 TC39 流程
### 3.5 TC39 流程
使用 ECMAScript 6,当时使用的发布过程有两个问题变得明显
通过 ECMAScript 6,我们可以看到当时的发布过程存在两个明显的问题
* 如果在版本之间经过太多时间,那么早期准备好的功能必须等待很长时间才能发布。并且已经准备好的功能可能会被迫赶上截止日期。
* 如果在版本之间隔了太长时间,那么早期准备好的功能必须等待很长时间才能发布,并且没有准备好的功能可能会赶不上死线。
* 功能通常在实现和使用之前很久就已设计好。因此,当发现与实现和使用相关的设计缺陷时,通常为时已晚。
* 功能通常在实现和使用之前很久就已设计好。因此,发现与实施和使用相关的设计缺陷为时已晚。
针对这些问题,TC39 制定了新的 _TC39 流程_:
针对这些问题,TC39 制定了新的 _TC39 流程 _:
* ECMAScript 功能是分别独立设计的,而且会经历 5 个阶段,从 0 开始(“Strawman”),结束于 4(“Finished”)。
* 后期的几个阶段需要原型实现和实际测试,从而获得设计和实现之间的有效交互。
* ECMAScript 版本每年发布一次,将会包括在发布截止日期之前已达到第 4 阶段的所有功能。
* ECMAScript 功能是独立设计的,经历各个阶段,从 0 开始(“稻草人”),结束于 4(“完成”)。
* 特别是后期阶段需要原型实现和实际测试,从而导致设计和实现之间的反馈循环。
* ECMAScript 版本每年发布一次,包括在发布截止日期之前已达到第 4 阶段的所有功能。
结果:较小的增量版本,其功能已经过现场测试。图 [1](#fig:tc39-process-stages) 说明了 TC39 过程。
![Figure 1: Each ECMAScript feature proposal goes through stages that are numbered from 0 to 4\. Champions are TC39 members that support the authors of a feature. Test 262 is a suite of tests that checks JavaScript engines for compliance with the language specification.](img/940447699009858ee8ea9d8b8214c75d.svg)
Figure 1: Each ECMAScript feature proposal goes through stages that are numbered from 0 to 4\. _Champions_ are TC39 members that support the authors of a feature. Test 262 is a suite of tests that checks JavaScript engines for compliance with the language specification.
因此,我们可以获得:每个版本变动较小,带有经过实际测试的特性。图 [1](#fig:tc39-process-stages) 说明了 TC39 过程。
![图 1:每个 ECMAScript 特性的提案会经过从 0 到 4 依次编号的 5 个阶段。_Champions_ 是指支持某个特性提案的 TC39 成员。 Test 262 是一套测试,用于检测 JavaScript 引擎是否正确实现了语言标准。](img/940447699009858ee8ea9d8b8214c75d.svg)
图 1:每个 ECMAScript 特性的提案会经过从 0 到 4 依次编号的 5 个阶段。_Champions_ 是指支持某个特性提案的 TC39 成员。 Test 262 是一套测试,用于检测 JavaScript 引擎是否正确实现了语言标准。
ES2016 是第一个根据 TC39 流程设计的 ECMAScript 版本。
有关 TC39 过程的更多信息,请参阅[“探索 ES2018 和 ES2019”](http://exploringjs.com/es2018-es2019/ch_tc39-process.html)
有关 TC39 过程的更多信息,请参阅[“探索 ES2018 和 ES2019”](es2018-es2019/ch_tc39-process.html)
#### 3.5.1。提示:考虑个别功能和阶段,而不是 ECMAScript 版本
#### 3.5.1 提示:让你的思路适应独立的功能和阶段,而不是一整个 ECMAScript 版本
在 ES6 之前,最常见的是根据 ECMAScript 版本来考虑 JavaScript。例如:“这个浏览器是否支持 ES6?”
在 ES6 之前,最常见的想法是根据 ECMAScript 版本来考虑 JavaScript。例如:“这个浏览器是否支持 ES6?”
从 ES2016 开始,最好考虑单个功能:一旦功能到达第 4 阶段,您就可以安全地使用它(如果它受到您所定位的 JavaScript 引擎的支持)。您不必等到下一个 ECMAScript 发布。
从 ES2016 开始,最好开始考虑单个功能:一旦功能到达第 4 阶段,你就可以安全地使用它(只要它被你所使用的 JavaScript 引擎所支持),而不必等到下一个 ECMAScript 版本发布。
### 3.6。常见问题:TC39 流程
### 3.6 常见问题:关于 TC39 流程
#### 3.6.1。 [我最喜欢的功能]如何做
#### 3.6.1 [填入你最喜欢的功能]进展怎么样
如果您想了解各种提议功能的各个阶段,请参考 [GitHub 存储库`proposals`](https://github.com/tc39/proposals)
如果您想了解每个特性草案处于什么阶段,请参考 [GitHub 仓库 `tc39/proposals`](https://github.com/tc39/proposals)
#### 3.6.2。是否有正式的 ECMAScript 功能列表?
#### 3.6.2 是否有正式的 ECMAScript 特性列表?
是的,TC39 回购列出了[完成的提案](https://github.com/tc39/proposals/blob/master/finished-proposals.md),并提到了它们被引入的 ECMAScript 版本
是的,TC39 的仓库里列出了[已经完成的提案](https://github.com/tc39/proposals/blob/master/finished-proposals.md),并提到了它们在哪个 ECMAScript 版本被引入
### 3.7。不断发展的 JavaScript:不要破坏网络
### 3.7 JavaScript 进化哲学:不要破坏(特性)网络
偶尔出现的一个想法是通过删除旧功能和怪癖来清理 JavaScript。虽然这个想法的吸引力是显而易见的,但它有明显的缺点。
经常出现的一个想法是通过删除旧功能和各种坑来清理 JavaScript。虽然这个想法很有吸引力,但它也有明显的缺点。
让我们假设我们创建了一个不向后兼容的 JavaScript 新版本并修复了它的所有缺陷。结果,我们遇到了以下问题:
假设我们创建了一个不向后兼容的 JavaScript 新版本并修复了它的所有缺陷。结果,我们遇到了以下问题:
* JavaScript 引擎变得臃肿:它们需要支持旧版本和新版本。对于诸如 IDE 和构建工具之类的工具也是如此。
* 程序员需要知道并不断意识到版本之间的差异。
* 您可以将所有现有代码库迁移到新版本(这可能需要大量工作)。或者你可以混合版本和重构变得更难,因为你无法在不改变它的情况下在版本之间移动代码。
* 你不得不指定每段代码 - 无论是嵌入在网页中的文件还是代码 - 它是用什么版本编写的。每个可想到的解决方案都有利有弊。例如, [_ 严格模式 _](ch_syntax.html#strict-mode) 是 ES5 稍微清洁的版本。它之所以不那么流行的原因之一是:在文件或函数的开头通过指令选择加入是一件麻烦事。
* 程序员需要知道并不断注意版本之间的差异。
* 你要么将所有现有代码库迁移到新版本(这可能需要大量工作),要么混合两种版本,让重构变得更难——因为你无法在不改代码的情况下在版本之间共用代码。
* 你不得不指定每段代码是用什么版本编写的,无论是嵌入在网页中的代码还是单独的文件。每个可想到的解决方案都有利有弊。例如, [_严格模式_](ch_syntax.html#strict-mode) 是 ES5 的稍微改进的版本。它之所以不那么流行的原因之一是:在文件或函数的开头通过加入指令来启用功能是一件麻烦事。
那么解决方案是什么?我们可以吃蛋糕吗?为 ES6 选择的方法称为“One JavaScript”:
那么解决方案是什么?我们能达到我们的目标吗?ES6 选择的方法称为“One JavaScript”:
* 新版本总是完全向后兼容(但偶尔可能会有轻微的,几乎不可察觉的清理)。
* 旧功能不会被删除或修复。相反,它们会引入更好的版本。一个例子是通过`let`声明变量 - 这是`var`的改进版本。
* 如果语言的某些方面发生了变化,那么它就会在新的语法结构中完成。也就是说,你隐含地选择加入。例如,`yield`只是生成器内部的关键字(在 ES6 中引入)。模块和类中的所有代码(都在 ES6 中引入)隐式处于严格模式。
* 旧功能不会被删除或修复。相反,会有一个更好的功能作为替代。一个例子是通过 `let` 声明变量——这是 `var` 的改进版本。
* 如果语言本身的某些方面发生了变化,那么这个变化只会在某个新的语法环境里应用。也就是说,你不需要做任何特定的声明。例如,`yield` 只是生成器内部的关键字(它在 ES6 中被引入);而模块和类中的所有代码(它们都在 ES6 中引入)隐式地处于严格模式。
有关 One JavaScript 的更多信息,请参阅[“探索 ES6”](http://exploringjs.com/es6/ch_one-javascript.html)
有关 One JavaScript 的更多信息,请参阅[“探索 ES6”](es6/ch_one-javascript.html)
![](img/bf533f04c482f83bfc407f318306f995.svg) **测验**
参见[测验应用程序](ch_quizzes-exercises.html#quizzes)
\ No newline at end of file
参见[测验应用程序](ch_quizzes-exercises.html#quizzes)
......@@ -51,35 +51,35 @@
<rect x="89.29133" y="89.29134" width="226.77165" height="29.76378" fill="white"/>
<rect x="89.29133" y="89.29134" width="226.77165" height="29.76378" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(94.29133 94.17323)" fill="black">
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="41.265826" y="15">Stage 0: strawman</tspan>
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="41.265826" y="15">第 0 阶段: strawman</tspan>
</text>
</g>
<g id="Graphic_21">
<rect x="89.29133" y="178.58267" width="226.77165" height="29.76378" fill="white"/>
<rect x="89.29133" y="178.58267" width="226.77165" height="29.76378" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(94.29133 183.46456)" fill="black">
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="45.113826" y="15">Stage 1: proposal</tspan>
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="45.113826" y="15">第 1 阶段: proposal</tspan>
</text>
</g>
<g id="Graphic_20">
<rect x="89.29133" y="267.874" width="226.77165" height="29.76378" fill="white"/>
<rect x="89.29133" y="267.874" width="226.77165" height="29.76378" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(94.29133 272.7559)" fill="black">
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="59.785826" y="15">Stage 2: draft</tspan>
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="59.785826" y="15">第 2 阶段: draft</tspan>
</text>
</g>
<g id="Graphic_19">
<rect x="89.29133" y="357.16535" width="226.77165" height="29.76378" fill="white"/>
<rect x="89.29133" y="357.16535" width="226.77165" height="29.76378" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(94.29133 362.04724)" fill="black">
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="40.961826" y="15">Stage 3: candidate</tspan>
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="40.961826" y="15">第 3 阶段: candidate</tspan>
</text>
</g>
<g id="Graphic_18">
<rect x="89.29133" y="446.4567" width="226.77165" height="29.76378" fill="white"/>
<rect x="89.29133" y="446.4567" width="226.77165" height="29.76378" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
<text transform="translate(94.29133 451.3386)" fill="black">
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="48.521826" y="15">Stage 4: finished</tspan>
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="48.521826" y="15">第 4 阶段: finished</tspan>
</text>
</g>
<g id="Line_17">
......@@ -97,25 +97,25 @@
<g id="Graphic_13">
<rect x="140.17716" y="131.48409" width="125" height="30" fill="white"/>
<text transform="translate(145.62116 136.48409)" fill="black">
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="4902745e-19" y="15">Pick champions</tspan>
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="4902745e-19" y="15">选择 champions</tspan>
</text>
</g>
<g id="Graphic_12">
<rect x="76.17716" y="218.9891" width="253" height="30" fill="white"/>
<text transform="translate(81.60516 223.9891)" fill="black">
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="11368684e-20" y="15">First spec text, 2 implementations</tspan>
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="11368684e-20" y="15">初步的标准文档,两个实现</tspan>
</text>
</g>
<g id="Graphic_11">
<rect x="143.17716" y="309.8466" width="119" height="30" fill="white"/>
<text transform="translate(148.58916 314.8466)" fill="black">
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="0" y="15">Spec complete</tspan>
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="0" y="15">标准文档编写完毕</tspan>
</text>
</g>
<g id="Graphic_10">
<rect x="103.67716" y="399.58696" width="198" height="30" fill="white"/>
<text transform="translate(109.02116 404.58696)" fill="black">
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="8668621e-19" y="15">Test 262 acceptance tests</tspan>
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="8668621e-19" y="15">进行 Test 262 测试</tspan>
</text>
</g>
<g id="Line_9">
......@@ -123,32 +123,32 @@
</g>
<g id="Graphic_8">
<text transform="translate(114.90634 48.68504)" fill="black">
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="0" y="15">Review at TC39 meeting</tspan>
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="0" y="15">在 TC39 会议上讨论</tspan>
</text>
</g>
<g id="Graphic_7">
<text transform="translate(342.32284 183.34645)" fill="black">
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="0" y="15">TC39 helps</tspan>
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="0" y="15">TC39 参与工作</tspan>
</text>
</g>
<g id="Graphic_6">
<text transform="translate(342.32284 272.6378)" fill="black">
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="0" y="15">Likely to be standardized</tspan>
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="0" y="15">即将成为标准</tspan>
</text>
</g>
<g id="Graphic_5">
<text transform="translate(342.32284 361.92913)" fill="black">
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="0" y="15">Done, needs feedback from implementations</tspan>
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="0" y="15">完成,等待实现方面的反馈</tspan>
</text>
</g>
<g id="Graphic_4">
<text transform="translate(342.32284 451.22047)" fill="black">
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="0" y="15">Ready for standardization</tspan>
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="0" y="15">准备成为标准</tspan>
</text>
</g>
<g id="Graphic_3">
<text transform="translate(342.32284 93.8189)" fill="black">
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="0" y="15">Sketch</tspan>
<tspan font-family="Helvetica Neue" font-size="16" font-weight="400" fill="black" x="0" y="15">草稿</tspan>
</text>
</g>
</g>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册