Files
frontend-docs/docs/javascript/04-functions/05-args.md
2025-03-25 16:40:25 +03:00

63 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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 (оператор "раскрывает" массив в список аргументов)
```
🚀 **Источник: [https://learn.javascript.ru/rest-parameters-spread-operator](https://learn.javascript.ru/rest-parameters-spread-operator)**