En JavaScript puedes hacer que una función acepte un número ilimitado de parámetros. Además es algo que podrás hacer de varias formas. Vamos a ver primero una mala aproximación para así explicar el problema y seguidamente veremos cómo solucionarlo mediante el operador spread.
Parámetros opcionales
Vamos a partir de que tienes una función llamada sumar() cuyo objetivo es el de sumar varios valores:
const sumar = (elem1, elem2) => {
  return elem1 + elem2;
}A la función anterior podemos pasarle dos parámetros, tal que así:
const resultado = sumar(2, 4);En caso de que quisieras agregar más parámetros, haciendo que la función funcione con dos o más parámetros, podrías agregar parámetros opcionales con un valor predefinido:
const sumar = (elem1, elem2, elem3 = 0) => {
  return elem1 + elem2 + elem2;
}Sin embargo, esta solución es impracticable si quisieras agregar infinitos parámetros, ya que tendrías que especificarlos uno a uno. Es decir, que no es una buena solución.
Usa el operador Spread
La solución pasa por usar el operador spread seguido del nombre de un único array que los contendrá a todos. El operador spread se representa mediante tres puntos .... En el interior de la función del ejemplo anterior podremos recorrer el array y sumar los elementos, obteniendo así el resultado:
const sumar = (...elems) => {
  let total = 0;
  for (const elem of elems) {
    total += elem;
  }
  return total;
}También podrías declarar una función que, por ejemplo, una un número ilimitado de cadenas:
const unirCadenas = (...cadenas) => {
  return cadenas.join(' ');
}Si quieres también puedes simplificar la función anterior usando una función flecha:
const unirCadenas = (...cadenas) => cadenas.join(' ');Si no estás seguro de lo que hemos hecho, puedes consultar el tutorial en el que explicamos en detalle las diferencias entre las funciones normales y las funciones flecha.
Ahora vamos a llamar a la función anterior:
unirCadenas('Que tengas', 'un buen día');Y esto ha sido todo.
 
									 
                         