Skip to content

Commit

Permalink
thinking in es6
Browse files Browse the repository at this point in the history
  • Loading branch information
phodal committed Feb 5, 2017
1 parent 24163a1 commit 3b21aa8
Showing 1 changed file with 47 additions and 15 deletions.
62 changes: 47 additions & 15 deletions chapters/chapter-3.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@

过去一年(即 2016 年)的每三个月(或者半年)里,前端领域不断涌现出新的知识,这些新的知识不断地在更新。这些知识点,可以源自于后台知识领域,源自于某些特定的语言,源自于新的知识理念。我们可以很轻松地找到一个例子,如前端所需要的 JavaScript 语言本身,这个语言出现了越来越多的变种。

语言的变化
为了完成一个复杂的前端应用,我们需要编写大量的 JavaScript 代码。但是早期版本的 JavaScript,并不适合编写中大规模的前端工程。

JavaScript 语言的变化
---

几年间,出现了 CoffeeScript、TypeScript、ClojureScript、Dart、ES6 等等的语言,他们都可以编译为 JavaScript,随后就可以在浏览器上运行。诸如 ES6,这一个新的 JavaScript 版本(现有的 JavaScript 版本,称为 ES5,即 EcmaScritp 5),则可以在最新的浏览器上运行部分或者全部的特性。
Expand All @@ -16,31 +18,54 @@

![JavaScript编译语言](../images/js-language-compare.jpg)

这种变化相当有趣。尽管 JavaScript 是所有主流浏览器上唯一支持的脚本语言,但是它在过去的主要用途是用来:做一些页面“特效”。它可以通过 DOM API 来操作页面上的元素,而这些元素就是显示在页面上的内容。

随后 Ajax 技术诞生了,开发人员发现可以用 JavaScript 做更多的事。JavaScript 之时,是用于在客户端上执行一些指令。而 Ajax 则可以让浏览器直接与服务端通讯。这就意味着,**你可以在浏览器间接地去操作数据库**,前端应用便因此而变得更加庞大。

### JavaScript

JavaScript 最初是由 Brendan Eich 在 xx 时开发的
最初,JavaScript 是由 Netscape 雇佣 Brendan Eich 来开发的。当时他花了 10 天时间,设计出了这个语言的第一个版本。Netscape 与 Sun公司合作开发了该语言,当时 Java 语言比较火热,也因此该语言由 LiveScript 改名为 JavaScript。由设计初衷就是,**适合于新手来使用**

对于一般的 Web 应用来说,JavaScript 搭配 jQuery 生态下的插件就够用。然而,应用并不会那么简单
此时正值浏览器大战之时,微软也推出了与 JavaScript 相似的 JScript 语言,并且内置于IE 3.0 中。随后 IE 借助于 Windows 的威力,逐渐地占领了市场。后来,Netscape 便将 JavaScript 提交给欧洲计算机制造商协会进行标准化。标准化后的 JavaScript 便称为 ECMAScript,JavaScript 的版本也以 ECMAScript 来命名

Google 开发了 Google Map,使用 Ajax 技术。RESTful API
尽管 JavaScript 的标准由 ECMA TC39[^tc39] 委员会制定,但是要操作浏览器的元素,还需要 DOM(Document Object Model,文档对象模型)。而 DOM 是由 W3C 组织推荐的处理 XML 的标准编程接口。遗憾的是,不同浏览器对于 DOM 的支持并不一致,还存在一定的差异。在早期的浏览器里,对于 DOM、事件、Ajax 的支持存在一定的差异,因此像 jQuery 这种跨浏览器的 JavaScript 库,相当的受欢迎。

Web 应用变得越来越复杂
[^tc39]: TC39 是负责 JavaScript 进化的委员会。TC39 定期举行会议,其会议是由成员公司(主要的浏览器厂商)派代表和特邀专家出席了会议

JavaScript 没有类,没有各种
然而,为了新手更容易上手,该语言缺少一些关键的功能,如类、模块、类型等等。在一些完备的 Web 框架里,框架本身会拥有相应的功能。

CoffeeScript
这些问题可以由各式各样的 JavaScript 库来解决。

对于常用
- 我们需要**类的功能**时,可以用 klass 库来补充;
- 我们需要**依赖管理**时,可以用 Require.js 库来补充;
- 我们需要**类型检查**时,可以用 tcomb 库来补充;
- 我们需要**Promise 库来解决 callback hell**时,可以用 Bluebird 来补充。
- 。。。

这一切看上去都很完美,但是好像有一点不对劲。

这些功能明明是这个语言应该要有的。我们却要在一个又一个的项目里,引用这些**本不需要**引用的库。

### ES6+

作为一个程序员,如果我们觉得一个工具不顺手,那么应该造一个新的轮子。我也喜欢去造前端的轮子,有时候是为了理解一个框架的原理,有时候则是为了创建一个更好的工具。也因此,当 JavaScript 不能满足前端工程师需求的时候,我们应该发展出一个更好的语言。于是,ES 6 就这样诞生了。
**作为一个程序员,如果我们觉得一个工具不顺手,那么应该造一个新的轮子**。我也喜欢去造前端的轮子,有时候是为了理解一个框架的原理,有时候则是为了创建一个更好的工具。也因此,当 JavaScript 不能满足前端工程师需求的时候,我们应该发展出一个更好的语言。于是,ES 6 就这样诞生了。

继上面的 JavaScript 的发展历史,现在主流浏览器都支持 ECMAScript 5.0 版本的标准,并且部分浏览器可以支持 ECMAScript 6。随后,ECMA 的草案以年份来命名,如 2016 年发布的 ECMAScript 草案称之为 ECMAScript 2016。而 ES 6 则对应于 ES 2015。

ECMAScript 2015 (ES6)
于是,现在:

上一次ES5后,几乎规范化了6年(2009年12月 到 2015年6月)
- 你可以使用定义函数的``默认参数``。不再需要使用 option,并 merge 这个对象了。
- 你可以使用模板对象,使用形如`` `$ {NAME}` ``的形式来拼接模板。不再需要在一个变量切换单引号 ' 和双引号 ",并使用很多加号 + 。
- 你可以使用箭头函数,来减少回调的代码量,并改善作用域 this 的问题。
- 你可以使用原生的 Promises 来解决地狱式回调的问题。
- 你还可以在 JavaScript 中使用真正的面向对象编程。
- 。。。

> TC39 是负责 JavaScript 进化的委员会。TC39 定期举行会议,其会议是由成员公司(主要的浏览器厂商)派代表和特邀专家出席了会议。
在最新的 Chrome、Edge、Safari、Firefox 浏览器里,它们对于 ES 6 的特性支持几乎都在 90% 以上。当我们需要在浏览器上运行 ES6 代码时,就需要使用类似于 Bable 这样的转译工具,来将代码转换为 ES5 来在普通浏览器上运行。

遗憾的是,主流的浏览器对于 ES2016+ 以及下一代的 ES.next 的支持是有限的。除此,它还有一系列需要改进的语法,并不能让人非常满意。

然后,我开始转向了 TypeScript。

### TypeScript

Expand All @@ -63,16 +88,23 @@ jQuery Gulp + Mustahce 生成前端模板

如 GitHub Pages 上的静态博客


最初,对于一般的 Web 应用来说,JavaScript 搭配 jQuery 生态下的插件就够用。然而,应用并不会那么简单。

### 九个月前:Backbone + 响应式设计

还是那个哲学,作为一个程序员,如果我们觉得一个工具不顺手,那么应该造一个新的轮子。

### 六个月前:React + Virtual DOM

### 六个月前:React + 响应式设计
当我们需要大量的修改页面元素时,页面就会出现明显的卡顿。

### 三个月前:Angular + Ionic

### 今天:RX.js、ES6、TypeScript
选择合适的技术栈,远远比选择流行的技术栈要重要得多,这也是我喜欢使用 Ionic 的原因。当我们在制作一个应用,它对性能要求不是很高的时候,那么我们应该选择开发速度更快的技术栈。

### 今天:xx Native

不幸的是,大部分的框架并不是那么简单。为了使用这个框架你,可能需要学习更多的框架、知识、理论。一个很好的例子就是 React,这个框架的开发人员,引入了相当多的概念,JSX、VIrtual Dom。而为了更好地使用 React 来开发,我们还需要引入其他框架,如 Redux、ES6 等等的内容。
然而,大部分的框架并不是那么简单。为了使用这个框架你,可能需要学习更多的框架、知识、理论。一个很好的例子就是 React,这个框架的开发人员,引入了相当多的概念,JSX、VIrtual Dom。而为了更好地使用 React 来开发,我们还需要引入其他框架,如 Redux、ES6 等等的内容。

幸运的是,无论是多新的框架,他们的源头都是一样的:HTML、CSS、JavaScript。这三个元技术栈运行在浏览器之上,创造出丰富的前端技术世界。

0 comments on commit 3b21aa8

Please sign in to comment.