如何實現一個接受無限參數的函式呢?

假設我們有一個名為 join() 的函式,它的任務是將我們傳遞給它的所有字符串串接起來。

例如,我們撰寫一個接受兩個字符串的原型:

const join = (string1, string2) => {
 return string1 + string2
}

當我們調用它時,我們得到一個由我們傳遞的兩個參數串接而成的字符串:

join('hi', ' flavio') // 'hi flavio'

一個簡單的方法是添加其他默認值為空字符串的參數,像這樣:

const join = (string1, string2, string3 = '') => {
 return string1 + string2 + string3
}

但這種方法並不適用於大量參數,並且會讓我們的代碼看起來很糟糕。

相反,我們可以使用展開運算符 (...) 後跟我們想要使用的參數名稱的語法。在函式內部,該參數是一個陣列,所以我們可以簡單地調用它的 .join() 方法來串接它包含的字符串,並傳遞一個空字符串作為參數(否則默認會在字符串之間加上逗號):

const join = (...strings) => {
 return strings.join('')
}

在我們的例子中,我們還可以使用箭頭函式中提供的隱式返回語法進一步簡化:

const join = (...strings) => strings.join('')

我們可以像之前一樣調用它:

join('hi', ' flavio') // 'hi flavio'
join('hi', ' flavio', ' it', ' is', ' a', ' beautiful day!') // 'hi flavio it is a beautiful day!'