JavaScript 参数数目未知的函数(可变参数函数)

例子

要创建一个接受不确定数量参数的函数,有两种方法取决于您的环境。

5

每当一个函数被调用时,它的作用域中有一个类似数组的参数对象,包含传递给函数的所有参数。索引或迭代 this 将允许访问参数,例如

function logSomeThings() {
    for (var i = 0; i < arguments.length; ++i) {
        console.log(arguments[i]);
    }
}

logSomeThings('hello', 'world');
// logs "hello"
// logs "world"

请注意,arguments如果需要,您可以转换为实际的数组;请参阅:将类数组对象转换为数组

6

在 ES6 中,可以使用rest 运算符( ...)使用最后一个参数声明该函数。这将创建一个数组,该数组保存从该点开始的参数

function personLogsSomeThings(person, ...msg) {
   msg.forEach(arg => {
       console.log(person, 'says', arg);
   });
}

personLogsSomeThings('John', 'hello', 'world');
// logs "John says hello"
// logs "John says world"

函数也可以用类似的方式调用,扩展语法

const logArguments = (...args) => console.log(args)
const list = [1, 2, 3]

logArguments('a', 'b', 'c', ...list)
// output: Array [ "a", "b", "c", 1, 2, 3 ]

此语法可用于将任意数量的参数插入到任何位置,并可用于任何可迭代apply对象(仅接受类似数组的对象)。

const logArguments = (...args) => console.log(args)
function* generateNumbers() {
  yield 6
  yield 5
  yield 4
}

logArguments('a', ...generateNumbers(), ...'pqr', 'b')
// output: Array [ "a", 6, 5, 4, "p", "q", "r", "b" ]