Rest参数
Rest参数接收函数的多余参数,组成一个数组,放在形参的最后,形式如下:
function func(a, b, ...theArgs) {
// ...
}
Rest参数和arguments对象的区别
- rest参数只包括那些没有给出名称的参数,arguments包含所有参数;
- arguments对象不是真正的array,而rest参数是Array的实例,可以直接应用sort, map, forEach, pop等方法;
- arguments对象拥有一些自己额外的功能。
从arguments转向数组
Rest参数简化了使用arguments获取多余参数的方法。
// Before rest parameters, the following could be found
function func(a, b) {
var args = Array.prototype.slice.call(arguments, f.length);
// ...
}
// to be equivalent of
function func(a, b, ...args) {
// ...
}
注意,rest参数之后不能再有其它参数(即,只能是最后一个参数),否则会报错。
function func(a, ...b, c) {
// ...
}
// Rest parameter must be last formal parameter
函数的length属性,不包括rest参数:
(function(a) {}).length // 1
(function(...a) {}).length // 0
(function(a, b, ...c)).length // 2