ES6 函数拓展之 rest 参数

ES6 引入 rest 参数(形式为...变量名),用于获取函数的多余参数
rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中

function add (...values) {
  let sum = 0
  for (var val of values) {
    sum += val
  }
  return sum
}
add(2, 5, 3) // 10

上面代码中的 values 是一个数组,数组成员为函数传入的参数

下面是一个 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 参数不会存在上面的问题,它就是一个真正的数组,数组特有的方法都可以使用

下面是一个利用 rest 参数改写数组push方法的例子

function push(array, ...items) {
  items.forEach(function(item) {
    array.push(item);
    console.log(item);
  });
}
var a = [];
push(a, 1, 2, 3)

注意: rest 参数只能是最后一个参数,否则会报错

// 报错
function f(a, ...b, c) {
  // ...
}

函数的 length 属性,不包括 rest 参数

(function(a) {}).length  // 1
(function(...a) {}).length  // 0
(function(a, ...b) {}).length  // 1

本文转载自 http://es6.ruanyifeng.com/#docs/function#rest-参数 并进行整理

除特殊说明外本人博客均属原创,转载请注明出处:http://blog.johnhan.cn/blog_1027.html
鄂ICP备17018604号-1  鄂公网安备42060702000030号