具有未知數量的引數的函式(可變函式)

要建立接受不確定數量的引數的函式,根據你的環境有兩種方法。

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