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精选文章