Skip to content

Latest commit

 

History

History
88 lines (35 loc) · 4.66 KB

why_es6.md

File metadata and controls

88 lines (35 loc) · 4.66 KB

为什么要有 ES6

这里会从 web 发展来解释 ES6 的新特性,都是个人理解,欢迎大家指正。

编程语言的发展目标其实都是 “提高生产力”。既然 ES 被发展到了第六代, 那也就是说,这门语言在 ES6 之前,不能解决或没能高效解决某些问题了。

ES6到底要解决哪些问题?回答这个问题前,我们先简单介绍下 web 发展的阶段历程。

WEB 1.0 的需求

了解过 JS 历史的同学们都知道,它最初是为了能在浏览器里运行,执行如表单验证之类的小问题的,其预想的使用人群为非专业技术人员的设计师。因为需求简单和用户小白,所以使用时限制较少,也就是通常说的很灵活。

如变量声明很随意,可以用 var 也可以不用; 声明的位置也很随意,可以在顶部也可以藏在中间的某个位置; 变量类型不固定,可以随便转换。

设计者充分想到了使用者的情况,让语言很灵活很包容,尽量保证程序可运行。

后于 JSES: 随着 web 的发展,浏览器厂商多了,大家各自有一套规范,对开发者不友好,对 web 发展 也不利,然后有人提交了一套规范到 ECMA, 而 jsES 的一种实现。

这时 web 的需求还是简单的展示些静态页面,灵活点反而是一优点,这是它与 App 八竿子打不着。

WEB 2.0 的需求

2005, 使用了 ajaxGmail,让人们逐步认识到 web 也可以做像 App 了, web 逐渐进入 2.0 时代。

逐渐地,web 不只是展示静态页面了, 它还可以运行富于交互的 App 了。需求进化了,web 项目规模变大了,作为 web App 开发工具的 JS, 也需要作出改变了。

ES6 做了哪些改动

当然 ES6 诞生,经历一段波折的历史。网上有详细的介绍,这里不展开了。

需求从静态页面升级到 App了,摊子规模大了。以前的就小功能小需求而言是灵活特性,已经成了阻碍开发大规模项目的绊脚石了。

项目大了之后,在成百上千行代码中,随意设置变量,给开发和调式都造成了不小的困难。所以 ES6 要做的就是清理这些绊脚石,增强并补足其他功能。我觉得,大概有以下这四类:

  1. 规范之前的做法,使语法更清晰明确,减少入坑的可能

    这也是块级作用域,箭头函数,数组的新的创建方法由来。

    关于清晰明确, 拿创建数组举例,new Array(...) 返回的结果,视参数情况而定,比较模糊,而Array.of(...) 就清晰明确地返回包含参数的数组 (关于数组具体参见这里) 。

  2. 补足功能

    设立新的数据类型 SetMapSymbol, 添加类型数组, Promise, module, 模板字符串, generator

  3. 提升开发效率

    引入大量语法糖,用更少的代码,做更多的事。

    比如之前的取值,太烦。就引入了解构赋值; 解构赋值,箭头函数,函数的默认参数等, class , extends, for of

  4. 更加开放与灵活

    ES 不仅自己增强了语言的功能,还是开发了拓展语言的接口,给予开发者增强语言的能力,也就是元编程。

    具体来说就是提供了 proxyreflection ,以及通过 symbol提供的语言内部方法。

还会发生什么

web 功能也越来越强大,其开发工具的一些弱点,也逐渐也有补足方法,如 引入 worker 弥补 JS 单线程的补足,引入 webGL 增强绘图能力,引入 webCL 加强计算能力,引入 webassembly 提升性能,增强 web 缓存如 indexDB 提供本地存储能力,以及 PWA 增强离线功能。

web 发展越来越强大,和原生应用能力之间的差距越来越小,而 web 平台的去中心化、开放、包容等先天优势,也能让它走得越来越远。

当然,也是因为去中心化,没有统一的组织,需要兼顾各方需求,web 虽然走得远,但走得并不快。

那于 ES 而言,它还会发生哪些变化。我希望的是 规范化,具体来说是 强类型语言的那种强制规范。

因为项目大了,不仅要能完成功能,其维护性更重要。即使在开发中,涉及多人协作时,没有统一的规范,沟通起来也很费事。

也许这些事情,交给第三方工具来做更合适些,如处理代码规范的 ESlint, 和语言规范 TypeScript, ES 去解决其他的事,也许是种挺好的办法,至少这赋予语言一定的活力。