# Оператор rest в JavaScript

Данный урок начнем с некоторого пояснения. Все предыдущие уроки данного раздела я не говорил вам всей правды про оператор `...`

На самом деле этот оператор в зависимости от места в коде может называться либо оператором spread, либо оператором rest.

Как вы уже знаете, когда оператор spread стоит перед массивом или строкой, он разделяет их на отдельные значения. Оператор rest, хотя и имеет такой же синтаксис в виде `...`, но предназначен для другого.

Сейчас будем разбираться, для чего. Пусть у нас есть функция, принимающая два параметра:

`function func(a, b) { console.log(a); console.log(b); }`

Вы должны уже знать, что если в функцию передать лишние параметры, это не приведет к ошибке:

`func(1, 2, 3, 4, 5);`

Оператор `rest` позволяет получить все лишние параметры в виде массива. Для этого в функцию добавляется еще один параметр (обязательно последним), перед которым пишутся `3` точки:

`function func(a, b, ...rest) { }`

Эти три точки и есть оператор rest, а имя переменной может иметь любое название, но обычно также принято называть его `rest`.

Давайте вызовем нашу функцию с избыточным количеством параметров и посмотрим, что попадает в параметры `a` и `b`, а что - в остаток `rest`:

`func(1, 2, 3, 4, 5); function func(a, b, ...rest) { console.log(a); // выведет 1 console.log(b); // выведет 2 console.log(rest); // выведет [3, 4, 5] }`

Если лишних параметров не будет, то в переменную `rest` запишется пустой массив:

`func(1, 2); function func(a, b, ...rest) { console.log(a); // выведет 1 console.log(b); // выведет 2 console.log(rest); // выведет [] }`

В функции вообще может не быть параметров, но при этом в нее можно добавить `rest`. В этом случае функцию можно будет вызвать с любым количеством параметров и все они будут попадать в массив `rest`:

`function func(...rest) { console.log(rest); }`
← →
↑
en ru