Join the AI Workshop to learn more about AI and how it can be applied to web development. Next cohort February 1st, 2026
The AI-first Web Development BOOTCAMP cohort starts February 24th, 2026. 10 weeks of intensive training and hands-on projects.
How is it possible to have a function that accepts an unlimited number of parameters?
Let’s say we have a function called join() whose job is to join all the strings we pass to it.
For example we write a prototype that accepts 2 strings:
const join = (string1, string2) => {
return string1 + string2
}
and when we call it, we get a string that is the concatenation the 2 arguments we pass:
join('hi', ' flavio') // 'hi flavio'
One simple way is to append additional parameters that default to an empty string, like this:
const join = (string1, string2, string3 = '') => {
return string1 + string2 + string3
}
but this approach does not scale well, because we’d need to add a large number of parameters and our code would look pretty bad.
Rest Parameters
Instead, we can use the spread operator (...) followed by the name of the parameter we want to use. Inside the function, the parameter is an array, so we can simply call its .join() method to concatenate the strings it contains, passing an empty string as argument (otherwise it defaults to concatenate strings adding a comma between them):
const join = (...strings) => {
return strings.join('')
}
In our case we can also simplify this using the implicit return syntax available in arrow functions:
const join = (...strings) => strings.join('')
and we can call this in the same way we did before:
join('hi', ' flavio') // 'hi flavio'
join('hi', ' flavio', ' it', ' is', ' a', ' beautiful day!') // 'hi flavio it is a beautiful day!'