具有未知數量的引數的函式(可變函式)
要建立接受不確定數量的引數的函式,根據你的環境有兩種方法。
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" ]