update func

This commit is contained in:
2025-03-05 12:33:59 +03:00
parent e60ec041ae
commit 31caa0e6de
15 changed files with 539 additions and 1 deletions

View File

@@ -0,0 +1,62 @@
---
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 (оператор "раскрывает" массив в список аргументов)
```