1.4.2 函数参数

开始

6. 使用 arguments 对象

函数的参数保存在一个类数组对象中。 在函数里,我们可以使用 arguments[i] 来获取传递给它的参数, 其中 i 是参数的序号,值从 0 开始。所以,传递给函数的第一个参数就是 arguments[0],参数的总数用 arguments.length 来表示。

使用 arguments 对象,我们可以使用比声明参数更多的参数来调用函数。比如:

// 函数定义:函数声明
function myConcat(separator) {
  let result = "";
  // 使用 arguments 对象
  for (let i = 1; i < arguments.length; i++) {
    result += arguments[i] + separator;
  }
  return result;
}
// 函数调用
myConcat(", ", "red", "orange", "blue");
myConcat("; ", "elephant", "giraffe", "lion", "cheetah");
myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");

注意:变量 arguments 是“类”数组而不是数组,因为它只具有有序索引 [i] 和 length 属性,而不具备所有的数组操作方法。

7. 函数参数

有两种特殊的参数语法:

  • default parameters,默认参数

  • rest parameters,剩余参数

7.1 默认参数

在 JavaScript 中,函数参数的默认值是 undefined。但在某些情况下,设置不同的默认值可能会更有用,这正是默认参数的用途。

之前,给参数设置默认值的方法通常是在函数体里判断参数值,如果它是 undefined,那就给它赋个新值。比如:

function multiply(a, b) {
  b = typeof b !== "undefined" ? b : 1;
  return a * b;
}

multiply(5); // 5

有了默认参数的语法,就不需要再手动检查了,可以直接这样写:

function multiply(a, b = 1) {
  return a * b;
}

multiply(5); // 5

7.2 剩余参数

剩余参数的语法,允许我们将不定数量的参数表示成一个数组。比如:

// 这里用剩余参数收集从第二个到结尾的参数
function multiply(multiplier, ...theArgs) {
  return theArgs.map(x => multiplier * x);
}

const arr = multiply(2, 1, 2, 3);
console.log(arr); // [2, 4, 6]

Last updated