> For the complete documentation index, see [llms.txt](https://strctr.gitbook.io/programming/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://strctr.gitbook.io/programming/01-languages/javascript/01-language/c-functions/c1-functions/02.ii-function-arguments-object.md).

# 02.ii Arguments object

В теле функции есть специальный идентификатор `arguments` (неявный объект), который ссылается на объект `Arguments`, присутствующий в вызове каждой функции. Объект `Arguments` – это объект, подобный массиву, позволяющий извлекать переданные функции значения по их номерам, а не по именам. JavaScript-функции при помощи `arguments` могут быть написаны таким образом, чтобы работать с *любым* количеством аргументов.

Основные свойства:

* Элементы массива `arguments` позиционно соответствуют переданным аргументам в функцию.
* В нестрогом режиме изменяя значение в `arguments` меняется и значение локальной переменной. В строгом это запрещено.
* Свойство `arguments.length` определяет количество аргументов фактически переданных при вызове функции (стоит отличать от свойства `length` самой функции - там это число параметров).
* Начиная c ES6 `arguments` является итерируемым.

```javascript
function foo() {
  const obs = merge(arguments);
  ...
}
```

В ES6 стоит использовать оператор `spread` вместо `arguments`. Заметим, что `rest` — настоящий массив, с методами `map`, `forEach` и другими, в отличие от `arguments`.

```javascript
function showName(firstName, lastName, ...rest) {
  ...
}
```
