ES6 rest参数

2023-05-22 11:45:18 浏览数 (1)

在ES6(ECMAScript 2015)中,引入了rest参数的概念,它允许函数接收不确定数量的参数,并将它们作为一个数组进行处理。rest参数提供了一种简洁和灵活的方式来处理可变参数的情况。

基本语法:

在函数定义时,可以使用三个点(...)加上一个参数名来表示rest参数。

代码语言:javascript复制
function functionName(...rest) {
  // 函数体
}
  • rest 是一个包含了所有剩余参数的数组。

示例:

代码语言:javascript复制
// rest参数
function sum(...numbers) {
  let result = 0;
  for (let number of numbers) {
    result  = number;
  }
  return result;
}

console.log(sum(1, 2, 3, 4, 5)); // 输出 15
console.log(sum(10, 20)); // 输出 30

在上面的示例中,我们定义了一个名为sum的函数,并使用rest参数...numbers来接收所有传入的参数。在函数体中,我们使用for...of循环遍历numbers数组,将所有数字相加并返回结果。

注意事项:

  • rest参数只能是函数的最后一个参数。之后的参数不能被当作rest参数。
  • rest参数是一个真正的数组,可以使用数组的方法和属性进行操作。

与arguments对象的比较:

在ES6之前,我们可以使用arguments对象来处理不确定数量的参数。然而,arguments对象是一个类似数组的对象,但它不是一个真正的数组,没有数组的方法和属性。相比之下,rest参数更加直观和灵活,它是一个真正的数组,可以方便地使用数组的方法和属性。

示例:

代码语言:javascript复制
// 与arguments对象的比较
function sumWithArguments() {
  let result = 0;
  for (let i = 0; i < arguments.length; i  ) {
    result  = arguments[i];
  }
  return result;
}

function sumWithRest(...numbers) {
  let result = 0;
  for (let number of numbers) {
    result  = number;
  }
  return result;
}

console.log(sumWithArguments(1, 2, 3, 4, 5)); // 输出 15
console.log(sumWithRest(1, 2, 3, 4, 5)); // 输出 15

在上面的示例中,我们定义了两个函数sumWithArgumentssumWithRest来计算传入参数的和。sumWithArguments使用了传统的arguments对象来处理参数,而sumWithRest使用了rest参数来处理参数。结果是相同的,但使用rest参数更加直观和方便。

结合其他参数使用:

rest参数可以与其他参数一起使用,包括普通参数和默认参数。

示例:

代码语言:javascript复制
// 结合其他参数使用
function greet(greeting, ...names) {
  for (let name of names) {
    console.log(`${greeting}, ${name}!`);
  }
}

greet('Hello', 'John', 'Alice', 'Bob');
// 输出:
//   Hello, John!
//   Hello, Alice!
//   Hello, Bob!

在上面的示例中,我们定义了一个名为greet的函数,接受一个greeting参数和任意数量的names参数。通过结合rest参数和普通参数,我们可以在函数调用时传递不确定数量的names参数,并在函数体中对它们进行处理。

0 人点赞