具有未知数量的参数的函数(可变函数)
要创建接受不确定数量的参数的函数,根据你的环境有两种方法。
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" ]