ES 规范为什么总在 6 月发版?
云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!
一.JavaScript 的诞生
1995 年 5 月,一个叫 Brendan Eich 的人花 10 天创造了 JavaScript
二.JavaScript 语言的标准化
最初 JavaScript 语言有 2 份标准:
- ECMA-262:主标准,由 ECMA 国际组织(Ecma International)负责管理
- ISO/IEC 16262:第二标准,由国际标准化组织(ISO,International Organization for Standardization)和国际电子技术委员会(IEC,International Electrotechnical Commission)负责管理
出于商标版权的原因,规范标准中将这门语言称为 ECMAScript,所以原则上 JavaScript 与 ECMAScript 指的是同一个东西,但有时也会加以区分:
- JavaScript:指语言及其实现
- ECMAScript:指语言标准及语言版本,比如 ES6 表示语言(标准)的第 6 版
P.S.ECMAScript 中的 ECMA 取自负责管理主标准的 ECMA 国际组织,这个组织最初叫欧洲计算机制造商协会(European Computer Manufacturers Association),后来影响范围不限于欧洲,遂更名为 ECMA 国际组织(Ecma International)
三.ES规范版本历史
- ECMAScript 1(1997 年 6 月):规范第一版
- ECMAScript 2(1998 年 6 月):为了同步 ISO 标准,引入了一些小更新
- ECMAScript 3(1999 年 12 月):增加了正则表达式、字符串处理、控制语句(do-while、switch)、异常处理(try-catch)等众多核心特性
- ECMAScript 4(2008 年 7 月废除):本来是一次大规模升级(静态类型、模块、命名空间等),但跨度过大,出现了分歧,最终没能推广使用
- ECMAScript 5(2009 年 12 月):变化不大,加了一些标准库特性和严格模式
- ECMAScript 5.1(2011 年 6 月):又一次小更新,为了同步 ISO 标准
- ECMAScript 6(2015 年 6 月):一大波更新,实现了当年 ES4 的许多设想,并正式改为按年份命名规范版本
- ECMAScript 2016(2016 年 6 月):第一个年度版本,与 ES6 相比,发布周期较短,新特性也相对少些
- ECMAScript 2017(2017 年 6 月):第二个年度版本
以后的 ECMAScript 版本(ES2018、ES2019、ES2020 等)都在 6 月正式获准生效
四.TC39 标准制定流程
从 ES6 来看,发版周期过长存在 2 个问题:
- 版本之间的时间跨度太长,提早定稿的特性要等待非常长的时间,一直等到规范正式发布(才能被实现和使用),而靠后的特性往往赶在最后发版期限之前才定稿,存在风险
- 语言特性的设计与实现和使用相隔太久,在实现和使用阶段才发现设计缺陷为时已晚
为此,TC39(ECMA 国际组织第 39 号技术委员会)启动了新的流程:
P.S.ECMA 国际组织设有众多技术委员会,除 TC39 ECMAScript 外,还有 TC43 Universal 3D (U3D)、TC45 Office Open XML Formats 等等。
主要变化在于:
- ECMAScript 各项特性独立设计,历经 5 个阶段,从 Stage 0(Strawman,初稿)开始,经 Stage 1(提案)、Stage 2(草案)、Stage 3(候选提案),最后到 Stage 4(Finished,过审提案)结束
- 要求在后几个阶段进行原型实现和实际测试(由Test 262负责),以便在设计和实现之间形成反馈循环
- ECMAScript 每年发布一版,囊括截止最后发版日期之前所有已经进入第 4 阶段的特性
所以,从 ES2016 开始(新 TC39 流程施行以来),ES 版本的概念被大大弱化了,需要关心的是特性提案处于第几阶段,只要进入第 4 阶段就已经算是标准特性了,会在下一个 6 月正式纳入标准
P.S.按照TC39 流程文档,应该是每年 7 月发版:
July: Approval of new standard by the ECMA General Assembly
但实际发版时间是每年 6 月,可能是为了纪念历史上那些 6 月发布的元老版本
五.向后兼容原则
我们发现 ES 规范每一版始终完全兼容先前的所有特性,比如 ES6 提出了let、const但并没有干掉var,这是因为如果推出了不兼容的新版本,会造成一些问题:
- JavaScript 引擎、IDE、构建工具都会变得臃肿,因为要支持新旧两版规范
- 开发者需要知道版本之间的差异
- 要么把现有的代码全都迁移到新版本,要么(不同项目)混用多个版本,重构会变得很麻烦
- 甚至要标注每段代码的所属版本,就像 ES5 手动开启严格模式一样,当时没有流行起来的一个原因是在文件或函数开头添加指令也很麻烦
为了避免这些问题,ES6 采用了一种策略叫One JavaScript:
- 新版本始终完全向后兼容(但偶尔可能会有轻微、不明显的清理)
- 旧特性不删除也不修复,而是引入更好的版本,比如let就是var的改进版
- 如果语言的某些方面有变化,只在新的语法结构内生效,即隐式选用,例如,yield只在generator中才是关键字、模块和类中的所有代码都默认开启严格模式
【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK
原文发布时间:2020-07-08
本文作者:ayqy贾杰
本文来自:“掘金”,了解相关信息可以关注“掘金”
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
“隐秘的角落”里照出远程医疗的远大前景,5G+4K/8K是推动医疗行业转型的幕后推手
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 美国未来学家阿尔文·托夫功多年前曾经预言:“未来医疗活动中,医生将根据计算机从远方传来的信息对病人进行诊断和治疗”。如今,这一预言已经付诸实现。 在新冠肺炎疫情爆发后,围绕“科技抗疫”的各种应用时常见诸于各大媒体,其中远程医疗的相关新闻尤为让人印象深刻。 ●武汉协和医院西区综合楼开辟5G远程会诊室,将武汉前线“战场”与北京后方“智囊”进行无缝衔接,群策群力共同解决问题; ●2月12日,解放军总医院与武汉火神山医院紧急连通首次远程会诊专线,为火神山医院的患者救治提供远程会诊指导和技术支持,京汉两地医疗专家组合力“斩妖除魔” ●…… 上世纪50年代末,美国学者威特森首先将双向电视系统用于医疗行业,开启了远程医疗的先河;如今时隔数十年,在5G通信、超高清视频传输、人工智能等技术与传统医疗行业的结合下,远程医疗迈进了新时代。 医疗行业“新兵”报到 在国外,远程医疗“Telemedicine”一词最早源于美国,与威特森同时期的朱特拉等人创立了远程放射医学,此后美国不断有人将通讯和电子技术应用于医疗...
- 下一篇
PHP算法:斐波那契数列的N种算法
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 前言 前段时间,遇到优化计算斐波那契数列的常规递归方法,但是一时间并没有及时想到很好的方法,所以后面查找了相关资料,总结了多种计算解法,所以分享出来,和大家一起交流学习。 斐波那契数是什么 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)。 知道了斐波那契数,那么下面我们就用多种不同的方法来计算获取第N位斐波那契数。 普通递归 这种方法是最常规的,直接根据定义F(n)=F(n - 1)+F(n - 2)递归计算即可,但是性能是最低的。 /** * 普通递归 * @param int $n * @return int */ function...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果