Linux 之父出席、干货分享、圆桌讨论,精彩尽在 OpenCloudOS 社区开放日,报名戳 了解详情
写点什么

ES6 令人激动的特性

  • 2015 年 7 月 10 日
  • 本文字数:1288 字

    阅读完需:约 4 分钟

Nick Justice 是 GitHub 开发者计划的一员。早在 ES6 语言标准发布之前,他就借助像 Babel 这样的转译器以及最新版本的浏览器在自己的项目中使用 ES6 特性。他认为,ES6 的新特性将极大地改变 JavaScript 的编写方式。近日,他在一篇博文中介绍了多项令人激动的特性:

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,函数递归调用过多会导致栈溢出(到达内存上限),这是因为函数每次调用自己时都会调用一个新版本。但优化之后,每次调用会同上次调用共享同一个上下文,保证了内存使用率的稳定。


感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015 年 7 月 10 日 04:2311371
用户头像

发布了 1008 篇内容, 共 338.0 次阅读, 收获喜欢 319 次。

关注

评论

发布
暂无评论
发现更多内容

工业互联网如何加速释放赋能价值?工业智能是关键

浪潮云

云计算

术,路,心:陈天桥的大脑行旅

脑极体

价值连城 图灵奖得主Yann LeCun 杨立昆的采访 给AI从业者的建议 John 易筋 ARTS 打卡 Week 61

John(易筋)

ARTS 打卡计划

JavaScript 中 Math.random() 生成随机数据

devpoint

JavaScript 8月日更 math

百度地图开发-绘制点线提示框 07

Andy阿辉

android Android 小菜鸟 Android端 8月日更

如何使用python制作动感炫酷的 动态二维码

4ye

Python 后端 二维码 8月日更

ShardingSphere JDBC 语句执行初探

萧

源码 ShardingSphere

“腾讯待办”小程序正式发布!初次见面,请多指教。

覌

我为什么坚持六点起床

月哥

VMware中安装的Ubuntu启动时出现A start job is running for raise network interfaces...

Mike

审计挖掘之CNVD通用漏洞

网络安全学海

黑客 网络安全 信息安全 WEB安全 漏洞挖掘

轻松让你的nginx服务器支持HTTP2协议

程序那些事

Java nginx HTTP 程序那些事 http2

命中率高达87%,GitHub收费下载超过28W次的Java面试题库外泄

Java架构师迁哥

03. AI就是与人类思考方式相似的计算机程序:从仿生学看人工智能的定义

数据与智能

人工智能

neo4j 基本概念与入门实例

escray

学习 neo4j 8月日更

在线JSON转HTML工具

入门小站

工具

强强联合!北鲲云与宝德就打造混合云HPC解决方案达成战略合作

北鲲云

Linux之time命令

入门小站

Linux

mycat入门:落地分库分表与读写分离

小鲍侃java

8月日更

SSH免登陆

Mike

【虚拟机专栏】熟悉的新朋友 - 链上JVM

趣链科技

区块链

ShardingSphere UI 初步体验

萧

源码 ShardingSphere

Docker 系列 _ 01_ 一念缘起

编程三昧

Docker 8月日更

【得物技术】得物App Android Crash治理演进

得物技术

发展 日志 进程 Crash 崩溃

区块链蕴含的变革力

CECBC

笔记分享 -- 弱网下的极限实时视频通信

声网

音视频 端到端 极限视频通信 弱网

区块链溯源:重塑咖啡产业链

CECBC

极光开发者周刊【No.0827】

极光JIGUANG

解析区块链技术如何帮助企业加速数字转型?

CECBC

死锁终结者:顺序锁和轮询锁!

王磊

Java 死锁 8月日更

架构实战训练营模块六作业

NewBranSTONE

#架构实战营

GPU容器虚拟化:用户态和内核态的技术和实践详解

GPU容器虚拟化:用户态和内核态的技术和实践详解

ES6令人激动的特性_JavaScript_谢丽_InfoQ精选文章