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,容易直接跳到:
letconst- 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把它送进基础设施层ES6和Babel又让它长出真正的现代自我形象
所以主线写到这里,最值得记住的不是:
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 关于 2015 年 ECMA-262 第六版获批的公告,其中 Allen Wirfs-Brock 将其描述为自 1999 年以来最重大的更新。关于 Babel 的历史角色,主要依据 6to5 / Babel 官方博客与项目回顾。正文将 ES6 概括为“现代 JavaScript 的心理分水岭”,并将 Babel 概括为“把未来语法提前带到今天”,属于基于标准进程、工具链普及与社区实践做出的历史判断。
关键人物速览
- Allen Wirfs-Brock:
ECMA-262第六版的项目编辑。理解为什么ES6会被视为自1999以来最重大的更新,绕不开他这条线。 - Brendan Eich:
Harmony这个名字和它背后的重建路线,都和他密切相关。第八篇里他代表的是“从委员会停战走向新共识”的那条线。 - Sebastian McKenzie:
6to5/Babel的发起者。理解为什么现代 JavaScript 会变成“先写未来,再编译回现在”,绕不开他。
参考与延伸阅读
ECMAScript 2015 Language Specification - ECMA-262 6th Edition
https://ecma-international.org/ecma-262/6.0Ecma 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/ECMAScript Harmony
https://esdiscuss.org/topic/ecmascript-harmonyHarmony of Dreams Come True
https://brendaneich.com/2012/10/harmony-of-dreams-come-true/6to5 + esnext
https://babeljs.io/blog/2015/01/12/6to5-esnextNot Born to Die
https://babeljs.io/blog/2015/02/15/not-born-to-dieThe State of Babel
https://babeljs.io/blog/2016/12/07/the-state-of-babelJavaScript: The First 20 Years
https://www.wirfs-brock.com/allen/jshopl.pdf
主线至此收束。若继续展开,最自然的下一批番外会是:模块化、前端工程化、npm 与 TypeScript。