63 lines
3.6 KiB
Markdown
63 lines
3.6 KiB
Markdown
---
|
||
sidebar_position: 5
|
||
---
|
||
|
||
# Остаточные параметры и оператор расширения
|
||
|
||
Когда мы видим "..." в коде, это могут быть как остаточные параметры, так и оператор расширения.
|
||
|
||
Как отличить их друг от друга:
|
||
|
||
- Если ... располагается в конце списка параметров функции, то это «остаточные параметры». Он собирает остальные неуказанные аргументы и делает из них массив.
|
||
- Если ... встретился в вызове функции или где-либо ещё, то это «оператор расширения». Он извлекает элементы из массива.
|
||
|
||
Полезно запомнить:
|
||
- Остаточные параметры используются, чтобы создавать новые функции с неопределённым числом аргументов.
|
||
- С помощью оператора расширения можно вставить массив в функцию, которая по умолчанию работает с обычным списком аргументов.
|
||
-
|
||
Вместе эти конструкции помогают легко преобразовывать наборы значений в массивы и обратно.
|
||
|
||
К аргументам функции можно обращаться и по-старому — через псевдомассив arguments.
|
||
|
||
## Остаточные параметры (...)
|
||
Остаточные параметры могут быть обозначены через три точки `....`
|
||
```js
|
||
function sumAll(...args) { // args — имя массива
|
||
let sum = 0;
|
||
for (let arg of args) sum += arg;
|
||
return sum;
|
||
}
|
||
alert( sumAll(1) ); // 1
|
||
alert( sumAll(1, 2) ); // 3
|
||
alert( sumAll(1, 2, 3) ); // 6
|
||
```
|
||
💥 ***Остаточные параметры должны располагаться в конце***
|
||
```js
|
||
function f(arg1, ...rest, arg2) { // arg2 после ...rest ?!
|
||
// Ошибка
|
||
}
|
||
```
|
||
## Переменная "arguments"
|
||
Все аргументы функции находятся в псевдомассиве `arguments` под своими порядковыми номерами.
|
||
Хотя arguments похож на массив, и его тоже можно перебирать, это всё же не массив. Методы массивов не поддерживаются.
|
||
```js
|
||
function showName() {
|
||
alert( arguments.length );
|
||
alert( arguments[0] );
|
||
alert( arguments[1] );
|
||
// for (let arg of arguments) alert(arg); // Объект arguments можно перебирать
|
||
}
|
||
showName("Юлий", "Цезарь"); // Вывод: 2, Юлий, Цезарь
|
||
showName("Илья");// Вывод: 1, Илья, undefined (второго аргумента нет)
|
||
```
|
||
💥 ***Стрелочные функции не имеют "arguments"***
|
||
Если мы обратимся к arguments из стрелочной функции, то получим аргументы внешней «нормальной» функции.
|
||
|
||
## Оператор расширения
|
||
Когда `...arr` используется при вызове функции, он «расширяет» перебираемый объект `arr` в список аргументов.
|
||
```js
|
||
let arr = [3, 5, 1];
|
||
alert( Math.max(...arr) ); // 5 (оператор "раскрывает" массив в список аргументов)
|
||
```
|
||
|