01|这篇真正要讲的,不是 ES6 功能清单,而是“现代 JavaScript”为什么终于像一件真的东西了

写到第八篇,主线其实已经走到一个很关键的位置。

第一篇讲的是它如何在极短时间里被造出来。

第二篇讲的是浏览器大战怎样把它撕裂。

第三篇讲的是 ECMAScript 如何作为停火协议出现。

第四篇讲的是 ES4 怎样在委员会分裂里夭折。

第五篇讲的是 Ajax 怎样把它从页面点缀推成应用引擎。

第六篇讲的是性能战争怎样把它正式扶正。

第七篇讲的是 Node.js 怎样把它送进新的基础设施权力中心。

到了这里,问题就会变得非常直接:

既然 JavaScript 已经承担了这么多关键现实,它自己到底什么时候才真正像一门“现代语言”?

很多人今天回头看,会很自然地把这个心理分水岭放在 ES6

这不是因为 ES6 之前的 JavaScript 不能用。

也不是因为 ES6 之后它突然就变成了另一门语言。

而是因为从 ES6 开始,整个社区第一次能比较整齐地说出一句话:

“这就是现代 JavaScript。”

所以第八篇真正要讲的,不是功能表。

而是:

为什么 ES6 会成为一整代开发者心里的公共分水岭。


02|它之所以重要,不只是因为改得多,而是因为它终于把 “Harmony” 从停战口号熬成了可落地现实

如果把第四篇和第八篇连起来看,你会发现 ES6 的意义其实很大一部分来自前史。

因为它不是平地起高楼。

它背后站着的是 ES4 失败之后那场漫长的重建。

2008 年,委员会在 Oslo 会议之后形成了后来被 Brendan Eich 称作 Harmony 的路线。

这条路线最重要的,不是某几个具体功能。

而是它回答了一个治理问题:

JavaScript 到底还能不能继续往前走,而且是在不再把委员会撕裂的前提下往前走。

所以 Harmony 本质上不是单个版本名。

它更像一个阶段性的政治承诺:

  • 语言继续演化
  • 但不再重演 ES4 式委员会事故
  • 大改可以有,但要建立在共识和渐进推进上

这点很关键。

因为很多人后来谈 ES6,容易直接跳到:

  • let
  • const
  • arrow functions
  • classes
  • modules
  • promises

可如果只看这些,就会把它写扁。

ES6 真正珍贵的地方是:

它第一次证明,Harmony 不是拖时间的话术,而是真的能产出一个规模巨大、又能被行业整体接住的新版本。

也就是说,第八篇真正要立住的第一层,是:

ES6 不是一次普通升级。

它是 ES4 崩盘之后,JavaScript 治理秩序第一次成功交出的完整答卷。


03|所以大家后来记住 ES6,记住的并不只是几个语法点,而是“这门语言终于开始像现代语言那样说话”

为什么很多人会把 ES6 当成“现代 JavaScript”的心理起点?

因为它传出来的信号太完整了。

ES5 当然也重要。

它修补了很多历史债,建立了严格模式,帮语言把地基收拾得更像样。

ES5 给人的感觉,更像是:

先把旧房子加固。

ES6 给人的感觉则是:

这房子终于开始按新城市的标准长了。

这时你看到的,不再只是局部修补。

你看到的是一整套“现代语言气质”开始成形:

  • let / const:作用域与绑定终于更像大家期待的样子
  • arrow functions:函数书写和回调表达突然顺了很多
  • classes:哪怕底层仍是原型链,语言终于给出一套更容易组织大型代码的表面形态
  • modules:模块化不再只能靠社区各自发明规矩
  • promises:异步流程第一次有了更现代、更可组合的公共语法现实

这些特性当然各有技术细节。

可对一整代开发者来说,它们最大的历史意义并不只是“更方便”。

而是它们一起传递出一种非常强的感受:

JavaScript 不再只是一个被历史拖着补丁前进的语言,它开始能主动提供一套面向未来的大型开发姿态。

这就是为什么 ES6 的象征意义,远远大于任何单个 feature。


04|可 ES6 之所以能成为分水岭,还有一个更现实的原因:它第一次和“更大规模代码”的期待正面接上了

这一点如果不点出来,第八篇还是会轻。

因为 ES6 并不是在真空里被欢迎的。

它是在 JavaScript 责任已经明显变重之后,才显得格外重要。

前几篇其实已经把路铺好了:

  • Ajax 之后,它要撑更复杂的应用交互
  • 性能战争之后,它被当成平台核心
  • Node.js 之后,它进入服务器和工具链

换句话说,到 ES6 这个阶段,JavaScript 已经不再只是“写点网页脚本”的语言。

它已经开始承担:

  • 更长生命周期的项目
  • 更复杂的团队协作
  • 更重的工程边界
  • 更高的可维护性期待

这时候,社区对它的要求当然会变。

大家会越来越在意:

  • 变量作用域是不是还这么拧巴
  • 模块到底什么时候才有语言级说法
  • 异步流程能不能不要一直层层回调
  • 组织大型代码时,语言本体到底能不能少拖一点后腿

所以 ES6 之所以会被热烈拥抱,并不只是因为它“看起来很新”。

更因为它正好撞上了整个行业一个很现实的需求窗口:

JavaScript 已经在承担大工程,可语言本体也该补上大工程所需要的姿态了。


05|但如果只把第八篇写成“标准终于发布”,还是不够,因为 Babel 几乎和标准本身一样重要

这里要进入第八篇最关键、也最现代的一层了。

因为 ES6 的历史地位,不能只靠标准文本来解释。

如果只有 2015 年标准通过这件事,它当然重要。

但还不足以解释为什么 ES6 会迅速变成整个行业的心理分水岭。

真正把这件事变成现实的,是另一条线:

Babel。

这是第八篇最不能写漏的地方。

因为 ES6 真正改变世界的方式,不是“标准过了,浏览器全都立刻支持,于是大家自然开始用”。

真实历史完全不是这样。

真实历史更像是:

  • 标准在推进
  • 实现还不完整
  • 社区已经等不及
  • 编译工具先把未来语法搬到今天来用

这就把整个故事彻底改写了。

从这里开始,JavaScript 社区第一次大规模进入一种新工作流:

先写未来,再编译回现在。

这件事太重要了。

因为它意味着:

现代 JavaScript 的现实版本,不再等于浏览器原生实现版本。

这在以前并不是默认常识。

可从 6to5 到后来的 Babel,社区突然获得了一种新能力:

标准还在路上,代码已经可以先上路。

这一下,ES6 就不再只是“规范书里的未来”。

它开始变成开发者今天就能写、今天就能发布、今天就能拿来组织工程的现实语言。


06|也就是说,Babel 真正做的,不只是兼容,而是把标准进程和社区工作流第一次硬绑在了一起

很多人后来提起 Babel,会先想到:

转译器。

兼容旧环境。

语法降级。

这些当然都对。

但如果只这么写,还是低估了它。

Babel 更深的历史作用是:

它第一次把 TC39 的未来提案、语言标准的渐进发布、以及社区日常开发工作流,绑成了一套联动系统。

这太关键了。

因为它意味着,从 ES6 这代开始,JavaScript 的成长方式已经和以前很不一样了。

以前更像:

  • 标准先定
  • 浏览器再实现
  • 开发者最后使用

而到了 ES6 / Babel 这个阶段,现实逐渐变成:

  • 提案出现
  • 工具链预支持
  • 社区提前尝试
  • 反馈反过来影响生态预期
  • 原生实现逐步补齐

注意,这里不一定总是直接反过来影响标准文本本身。

但它确实改变了整个社区“等待标准”的姿势。

从这之后,JavaScript 世界越来越习惯一种很独特的现实:

正式标准、实验提案、编译工具、构建链和生产代码,会在同一个时间段里同时推进。

这就是现代 JavaScript 的真正制度环境。

它不是单靠浏览器版本线性解锁的。

它是靠:

  • 标准
  • 工具
  • 生态
  • 工程实践

一起把未来提前拉到现在。


07|所以现代 JavaScript 最反直觉的一点是:它的“现实存在”常常先出现在工具链里,再慢慢落到原生环境里

这件事其实特别值得记。

因为它很反直觉。

在很多语言里,你会天然觉得:

语言是什么样,以官方发布和原生实现为准。

可 JavaScript 到了 ES6 以后,现实越来越不是这么运作的。

它开始变成一种很特别的双层现实:

  • 一层是规范和原生实现
  • 一层是社区通过工具链提前使用的现实版本

而对大量开发者来说,后者甚至常常更像“真正的语言”。

因为你每天写到的、构建到的、上线的 JavaScript,往往先经过 Babel 和整套工程链条。

这意味着什么?

意味着第八篇不只是在讲 ES6

它其实也在讲:

现代 JavaScript 为什么会变成一种“先由工具链定义现实感,再由运行时慢慢追认”的语言。

这是一种非常特别的历史形态。

它的后续影响极大。

因为从这里开始,后面的:

  • 提案文化
  • 工程化
  • bundler 生态
  • 前端构建流程
  • TypeScript 的普及方式

几乎都能沿着这条路继续长。

也就是说,ES6 不是只给 JavaScript 加了一批新语法。

它连同 Babel 一起,重写了这门语言以后是怎么进入现实世界的。


08|为什么 ES6 真正带来的,不只是新语法,而是一种现代自我形象

把前面这些线叠一起看,第八篇最重要的判断可以压成一句:

ES6 让 JavaScript 第一次拥有了“现代自我形象”,而 Babel 让这个形象提前活了起来。

ES6 提供的,是语言层面的公共形象。

它告诉整个行业:

JavaScript 可以不只是那门历史包袱很重、到处充满妥协的小脚本。

它也可以拥有:

  • 面向大工程的姿态
  • 面向未来演化的节奏
  • 面向现代开发者心理预期的表达方式

Babel 提供的,则是现实入口。

它告诉大家:

不用等所有浏览器整齐到位。

不用等世界完全准备好。

现代 JavaScript 可以先被写出来,再慢慢被世界补齐。

这就解释了为什么 ES6 会变成心理分水岭。

因为从这时起,“现代 JavaScript”第一次既是一个标准目标,也是一个可立即实践的现实。


09|写到这里,主线其实也就收束了:JavaScript 的历史,不是从缺陷走向完美,而是从偶然脚本一路长成被整个生态共同托举的平台语言

如果把这八篇主线一起回看,会发现这条历史特别不像传统教材会写的那种“自然成熟史”。

它更像一连串被现实逼出来的转折:

  • 市场压力先把它造出来
  • 浏览器大战先把它撕裂
  • 标准化先把它勉强稳住
  • 委员会内战差点把它再度带偏
  • Web 应用化把它推上主舞台
  • 性能战争把它正式扶正
  • Node.js 把它送进基础设施层
  • ES6Babel 又让它长出真正的现代自我形象

所以主线写到这里,最值得记住的不是:

JavaScript 终于变完美了。

恰恰相反。

更值得记住的是:

它从来不是靠纯粹设计完整性赢下来的,而是靠一次次在现实冲突里重新组织自己、重新争取共识、重新长出新生态活下来的。

这才是这门语言真正的命。

如果后面还要继续往下拆,你就会自然走到:

  • 模块化江湖
  • 前端工程化江湖
  • npm 江湖
  • TypeScript 江湖

因为这些题目,本质上都是 ES6 之后这套新现实继续外溢的结果。


10|ES6 和 Babel 一起把现代 JavaScript 提前变成现实

ES6 最值得记住的,不是它一次性加入了多少新语法。

更值得记住的是:

它第一次让整个社区能够比较确定地说,JavaScript 也有了一个足够清晰、足够现代、足够面向大型工程的公共未来。

Babel 最值得记住的,也不只是“它能转译代码”。

更值得记住的是:

它让这个未来不必等世界完全准备好,今天就能开始被书写。

所以第八篇如果只记一句,就记这句:

JavaScript 真正长成现代模样,不是在 1995,而是在 ES6 把未来说清楚、Babel 又把未来提前带到今天的时候。


编者注(事实核对):文中关于 Harmony 路线的形成,主要依据 Brendan Eich 在 2008 年发布的 ECMAScript Harmony 说明,以及后续对 Harmony 愿景的公开文章。关于 ES6 / ECMAScript 2015 的正式通过时间,主要依据 Ecma International 关于 2015ECMA-262 第六版获批的公告,其中 Allen Wirfs-Brock 将其描述为自 1999 年以来最重大的更新。关于 Babel 的历史角色,主要依据 6to5 / Babel 官方博客与项目回顾。正文将 ES6 概括为“现代 JavaScript 的心理分水岭”,并将 Babel 概括为“把未来语法提前带到今天”,属于基于标准进程、工具链普及与社区实践做出的历史判断。


关键人物速览

  • Allen Wirfs-BrockECMA-262 第六版的项目编辑。理解为什么 ES6 会被视为自 1999 以来最重大的更新,绕不开他这条线。
  • Brendan EichHarmony 这个名字和它背后的重建路线,都和他密切相关。第八篇里他代表的是“从委员会停战走向新共识”的那条线。
  • Sebastian McKenzie6to5 / Babel 的发起者。理解为什么现代 JavaScript 会变成“先写未来,再编译回现在”,绕不开他。

参考与延伸阅读

  1. ECMAScript 2015 Language Specification - ECMA-262 6th Edition
    https://ecma-international.org/ecma-262/6.0

  2. Ecma International: ECMAScript 2015 adopted
    https://ecma-international.org/news/at-the-june-17-2015-ecma-general-assembly-in-montreux-ecma-262-6th-edition-ecmascript-2015-language-specification-and-ecma-402-2nd-edition-ecmascript-2015-internationalization-api-ha/

  3. ECMAScript Harmony
    https://esdiscuss.org/topic/ecmascript-harmony

  4. Harmony of Dreams Come True
    https://brendaneich.com/2012/10/harmony-of-dreams-come-true/

  5. 6to5 + esnext
    https://babeljs.io/blog/2015/01/12/6to5-esnext

  6. Not Born to Die
    https://babeljs.io/blog/2015/02/15/not-born-to-die

  7. The State of Babel
    https://babeljs.io/blog/2016/12/07/the-state-of-babel

  8. JavaScript: The First 20 Years
    https://www.wirfs-brock.com/allen/jshopl.pdf


主线至此收束。若继续展开,最自然的下一批番外会是:模块化、前端工程化、npm 与 TypeScript。