Как получить все аргументы у стрелочной функции?
Функции
У стрелочной функции нет объекта `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 удобнее — сразу доступны методы массива.