
上QQ阅读APP看书,第一时间看更新
3.3.2 rest参数
ES6引入了rest参数(形式为...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。
【示例3-6】rest参数搭配的变量是一个数组,该变量将多余的参数放入数组中:
function add(...values) { let sum = 0; for (var val of values) { sum += val; } return sum; } add(2, 5, 3) // 10
上面代码的add函数是一个求和函数,利用rest参数可以向该函数传入任意数目的参数。
【示例3-7】使用rest参数代替arguments变量:
// arguments变量的写法 function sortNumbers() { return Array.prototype.slice.call(arguments).sort(); } // rest参数的写法 const sortNumbers = (...numbers) => numbers.sort();
上面代码的两种写法,比较后可以发现,rest参数的写法更简洁。arguments对象不是数组,而是一个类似数组的对象。所以为了使用数组的方法,必须使用Array.prototype.slice.call先将其转为数组。rest参数就是一个真正的数组,数组特有的方法都可以使用。
【示例3-8】再比如,使用rest参数改写数组push方法:

注意,rest参数之后不能再有其他参数,也就是说rest参数只能是最后一个参数,否则会报错:
// 报错 function f(a, ...b, c) { // ... }