具有未知数量的参数的函数(可变函数)

要创建接受不确定数量的参数的函数,根据你的环境有两种方法。

Version <= 五

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

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

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

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

Version >= 6

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

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" ]