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

3.6.2 剩余参数

在ES2015 发布之前,在ECMAScript对函数的定义中存在一个名为arguments的对象,该对象用于在函数体内访问当前被调用时所传入的参数列表。这个arguments是一个 类数组对象(Array-like Object) ,即arguments以自然数(0、1、2 等)作为属性名并以相对应的传入参数值作为属性值,所以arguments对象并不具备数组类型所具有的方法等。因此在以前的ECMAScript应用开发中,经常会使用Array.slice来将arguments转换为一个真正的数组。

在ES2015 中同样为Array这个对象添加了一个新的方法Array.from,这个方法作用就是将一些可以被转换为数组的对象转换为数组,其中最主要的就是类数组对象(包括arguments)。

3.6.2.1 使用语法

ES2015 中对剩余参数有了更为优雅和标准的语法,同时也避免了如[].slice等不干净代码的使用,直接将需要获取的参数列表转换为一个正常数组,以便使用。

3.6.2.2 使用场景

在以往的ECMAScript开发中,arguments对象最大的应用场景是判断当前的调用行为,以及获取未在函数形参内被定义的传入参数。比如十分常用的merge和mixin函数(合并对象)就会需要使用到剩余参数这个特性来实现。

3.6.2.3 注意事项

语法使用的注意事项

要注意的是,一旦一个函数的参数列表中使用了剩余参数的语法糖,便不可以再添加任何参数,否则会抛出错误。

arguments与剩余参数

虽然从语言角度看,arguments和...args是可以同时使用的,但有一种情况除外——arguments在箭头函数中,会跟随上下文绑定到上层,所以在不确定上下文绑定结果的情况下,尽可能不要在箭头函数中使用arguments,而要使用...args。

虽然ECMA委员会和各类编译器都没有强制要求用...args来代替arguments,但从实践经验看来,...args确实可以在绝大部分场景下代替arguments使用,除非在特殊的场景下需要使用到arguments.callee和arguments.caller。因此,我推荐都使用...args而非arguments。

在严格模式(Strict Mode)中,arguments.callee和arguments.caller是禁止被使用的。 Z0HCLVp5ReqA5bDNo0I+uDp4UDi9GZypOvNUr7foVixHU+7QrlGquH0+gveZNywI

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