PassFront
  1. PassFront
  2. База знаний
  3. Функции

Как получить все аргументы у стрелочной функции?

Функции

У стрелочной функции нет объекта `arguments` — все аргументы получают через rest-параметр `...args`, который собирает их в массив.

Проблема — нет arguments

Стрелочные функции не имеют своего arguments:

const fn = () => {
  console.log(arguments); // ReferenceError или arguments внешней функции
};

Решение — rest-параметр

const fn = (...args) => {
  console.log(args); // массив всех аргументов
};
fn(1, 2, 3); // [1, 2, 3]

...args собирает все переданные аргументы в настоящий массив.

Преимущество rest над arguments

  • rest — настоящий массив (есть map, filter, reduce).
  • arguments — array-like (нет методов массива, нужно преобразовывать).
// Обычная функция с arguments (не массив)
function old() {
  const arr = Array.from(arguments); // нужно преобразовать
}

// Стрелка с rest (сразу массив)
const modern = (...args) => args.reduce((a, b) => a + b, 0);

Комбинация с именованными

const fn = (first, ...rest) => {
  console.log(first); // первый
  console.log(rest);  // остальные массивом
};
fn(1, 2, 3); // first=1, rest=[2,3]

Коротко для собеседования

У стрелочной функции нет своего arguments — все аргументы получают через rest-параметр (...args), который собирает их в настоящий массив (в отличие от array-like arguments, требующего преобразования). Можно комбинировать с именованными: (first, ...rest). Rest удобнее — сразу доступны методы массива.

Другие вопросы раздела