ES6令人激动的特性
2016-01-21 14:31
218 查看
Nick Justice是GitHub开发者计划的一员。早在ES6语言标准发布之前,他就借助像Babel这样的转译器以及最新版本的浏览器在自己的项目中使用ES6特性。他认为,ES6的新特性将极大地改变JavaScript的编写方式。近日,他在一篇博文中介绍了多项令人激动的特性:
Promises:对于JavaScript而言,promises不是什么新东西,许多库都提供了这一特性。但现在,它正式成为ES6语言标准的一部分。这里有一个使用ES6
Promises处理AJAX请求的例子,从中可以一窥其工作方式。
块作用域:一般来说,JavaScript的作用域是“基于函数”的。就是说,为了包含一个私有变量,开发者必须声明一个函数。这点一直为许多使用过它语言的开发者所诟病。但现在,ES6提供了关键字
箭头函数:这是ES6中最令Nick激动的特性之一。
Generators:这是一种新型的JavaScript函数,使开发者可以暂挂他们的函数,并在多次执行中返回不同的值。关于该特性的详细信息,请阅读Nick先前写过的一篇文章及查阅MDN。这可能是最令Nick激动的特性。
Import(模块):在ES6语言标准正式发布之前,Nick及其团队就已经借助诸如Require.js和Browserify这样的框架在项目中使用模块加载。现在,ES6语言本身就提供了模块定义,语法如下:
除了基本语法外,开发者还可以在一个模块中多次
类:ES6的类存在一些争议,主要是因为其实现没有采用传统的继承方式。这意味着,新的
优化了“尾调用(Tail Calls)”:一直到ES5,函数递归调用过多会导致栈溢出(到达内存上限),这是因为函数每次调用自己时都会调用一个新版本。但优化之后,每次调用会同上次调用共享同一个上下文,保证了内存使用率的稳定。
另外一篇同类文章推荐 http://www.cnblogs.com/Wayou/p/es6_new_features.html
Promises:对于JavaScript而言,promises不是什么新东西,许多库都提供了这一特性。但现在,它正式成为ES6语言标准的一部分。这里有一个使用ES6
Promises处理AJAX请求的例子,从中可以一窥其工作方式。
块作用域:一般来说,JavaScript的作用域是“基于函数”的。就是说,为了包含一个私有变量,开发者必须声明一个函数。这点一直为许多使用过它语言的开发者所诟病。但现在,ES6提供了关键字
let,使开发者可以声明块级变量,下面是一个例子:
function foo() { let bar = true; if (bar) { var baz = 'hi!'; } console.log(baz); // hi } foo(); function foo2() { let bar = true; if (bar) { let baz = 'hi'; } console.log(baz); // Uncaught ReferenceError: baz未定义 } foo2();
箭头函数:这是ES6中最令Nick激动的特性之一。
=>不只是关键字
function的简写,它还带来了其它好处。箭头函数与包围它的代码共享同一个
this。有经验的JavaScript开发者都熟悉诸如
var self = this;或
var that = this这种引用外围
this的模式。但借助
=>,就不需要这种模式了。
Generators:这是一种新型的JavaScript函数,使开发者可以暂挂他们的函数,并在多次执行中返回不同的值。关于该特性的详细信息,请阅读Nick先前写过的一篇文章及查阅MDN。这可能是最令Nick激动的特性。
Import(模块):在ES6语言标准正式发布之前,Nick及其团队就已经借助诸如Require.js和Browserify这样的框架在项目中使用模块加载。现在,ES6语言本身就提供了模块定义,语法如下:
// myModule.js export function myModule(someArg) { return someArg; } // main.js import {myModule} from 'myModule'; myModule('foo'); // 'foo'
除了基本语法外,开发者还可以在一个模块中多次
export以及
import整个模块作为一个特定的命名空间。然后,就可以通过新命名空间调用模块中的每个方法:
// myModule.js export var foo = 'foo'; export var bar = 'bar'; // main.js import * as baz from 'myModule'; baz.foo; // 'foo' baz.bar // 'bar'
类:ES6的类存在一些争议,主要是因为其实现没有采用传统的继承方式。这意味着,新的
class关键字更多的只是位于传统的原型继承之上的语法糖。关于JavaScript的原型继承,请查看这里和这里。关于ES6类的实例,请查看这里。
优化了“尾调用(Tail Calls)”:一直到ES5,函数递归调用过多会导致栈溢出(到达内存上限),这是因为函数每次调用自己时都会调用一个新版本。但优化之后,每次调用会同上次调用共享同一个上下文,保证了内存使用率的稳定。
另外一篇同类文章推荐 http://www.cnblogs.com/Wayou/p/es6_new_features.html
相关文章推荐
- Openssl目录名以及功能描述
- Linux学习29_解决bash: 命令: command not found
- Fragment参数传递(一)
- Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny
- jdk自带的查看死锁工具
- ExtJS中的Anchor
- 数据库的shell命令导入导出
- Android学习笔记——用ObjectAnimator平移动画仿微信表情雨的简单实现
- ImageView使用ImageLoad开源库导致图片大小变形问题
- 解决python中路径中包含中文无法找到文件的问题
- 深入浅出ES6(一):ES6是什么
- 反病毒流程
- 混编Objective-C 和 Swift
- java导出excel
- Java学习——1.初出茅庐
- Cacti监控Linux主机 脚本
- 提取ipa里面的资源图片
- CSS Modules 详解及 React 中实践
- windows下用cmd命令netstat查看系统端口使用情况
- 贝叶斯算法与朴素贝叶斯算法的介绍