要创建一个接受不确定数量参数的函数,有两种方法取决于您的环境。
每当一个函数被调用时,它的作用域中有一个类似数组的参数对象,包含传递给函数的所有参数。索引或迭代 this 将允许访问参数,例如
function logSomeThings() { for (var i = 0; i < arguments.length; ++i) { console.log(arguments[i]); } } logSomeThings('hello', 'world'); // logs "hello" // logs "world"
请注意,arguments如果需要,您可以转换为实际的数组;请参阅:将类数组对象转换为数组
在 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" ]