购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.5

表达式结构
(Destructuring)

我们经常可以在其他编程语言(如Go语言 )中看到 多返回值 这种特性,因为在很多实际场景中,函数的返回值并不只有一个单一的值,就像传入参数并不只有一个一样。但是在ES2015标准之前,ECMAScript 中并没有可以直接使用语法来实现多返回值的特性,即便在后来的Promise/A+ 或ES2015 的Promise 实现中,也没有对多返回值这个特性做任何支持。

ES2015 中的Promise特性基于Promise/A+标准制定。

在Go语言中,基本上任何IO操作都会以多返回值来返回错误信息和IO结果,而多返回值也是Go语言从一开始便支持的特性,此外还有著名的嵌入式语言Lua也支持多返回值。

在实际开发中,我们不难发现多返回值的需求是远远大于单一返回值的,比如在一些IO操作中,需要返回的除了数据以外,还可能有请求状态等。在ES2015 标准发布之前,开发者们经常用对象字面量或数组来模拟多返回值。

除了同步函数以外,在ECMAScript中(尤其是Node.js环境),利用回调函数来返回多个返回值也成为了一种实现方式。比如在Node.js的标准库中,所有的异步IO操作都会以一个标准的回调函数来响应IO状态。而这种标准回调函数的参数列表第一个都会是一个表示错误信息的Error对象,如果IO操作过程中没有任何错误,最后响应时该参数的值应为null。而IO操作的结果以后续参数的形式传入。

但这些方法始终无法让工程师们满足,所以经过TC-39 的讨论后,模式匹配终于进入了语言标准中,以实现原生的函数多返回值。当然了,在ES2015 中的模式匹配特性并不只局限于用来实现多返回值,它的一些特性甚至超越了Go、Lua 、Python 等支持多返回值的编程语言,以至于我们可以使用这个特性实现更多的需求,甚至实现一些让我们出乎意料的功能。 gj98huLft/DOeSq2/sEDxcnCPzS7WuuSZSSUzRx8gznHNpKgy4gQqbjCJlDuuJgG

点击中间区域
呼出菜单
上一章
目录
下一章
×