Оператор spread в JavaScript

В ES6 появился специальный оператор ..., называющийся spread.

Когда оператор spread стоит перед массивом, он разделяет этот массив на отдельные значения, превращая массив в набор параметров, необходимых для вызова функции.

Наверняка звучит непонятно, поэтому давайте посмотрим на простом примере. Пусть у нас есть функция, принимающая 3 параметра и возвращающая их сумму:

javascriptfunction func(num1, num2, num3) {
  return num1 + num2 + num3;
}

Пусть у нас также есть массив из трех элементов:

javascriptlet arr = [1, 2, 3];

Очевидно, что мы не можем просто взять и передать этот массив параметром функции, вот так:

javascriptlet arr = [1, 2, 3];
func(arr);

Ведь в этом случае весь массив попадет в первый параметр функции, а в этот параметр необходимо передавать число (да и в остальные параметры тоже).

Конечно же, можно поступить следующим образом:

javascriptlet arr = [1, 2, 3];
func(arr[0], arr[1], arr[2]);

Но есть и более простой путь - использовать оператор spread:

javascriptlet arr = [1, 2, 3];
func(...arr);

Наличие переменной не является обязательным - можно применять spread прямо к массиву:

javascriptfunc(...[1, 2, 3]);
Задание 1

Дан массив:

javascriptlet arr = [1, 2, 3, 4, 5];

Дана также функция:

javascriptfunction func(num1, num2, num3, num4, num5) {
  return num1 + num2 + num3 + num4 + num5;
}

Найдите с помощью приведенной функции сумму элементов массива.