Ответ
Массив arguments — это объект, доступный внутри функций, содержащий все переданные аргументы, даже если они не объявлены в параметрах. Это псевдомассив (имеет индексы и length, но не методы массива).
function sum() {
let total = 0;
for (let i = 0; i < arguments.length; i++) {
total += arguments[i];
}
return total;
}
console.log(sum(1, 2, 3)); // 6
Особенности:
- Не работает в стрелочных функциях.
- Устаревший подход, лучше использовать rest-оператор (
...args). - Не поддерживает методы массивов (например,
forEach), но можно конвертировать в массив черезArray.from(arguments).
Ответ 18+ 🔞
Да ты посмотри, что за зверь такой этот arguments! Сидит себе внутри функции, как паук в банке, и держит в лапках ВСЕ переданные аргументы. Даже те, которые ты в параметрах-то и не объявлял, ёпта! Он же псевдомассив, хитрая жопа: у него есть индексы и длина (length), но вот методов обычного массива — нихуя. Не сможешь ты на нём forEach или map вызвать просто так.
function sum() {
let total = 0;
for (let i = 0; i < arguments.length; i++) {
total += arguments[i];
}
return total;
}
console.log(sum(1, 2, 3)); // 6
Вот, смотри, функция sum вроде бы пустая, нихуя не принимает. А arguments внутри всё схватил — и раз, два, три — и просуммировал. Волшебство, блядь!
Но есть нюансы, ебать мои старые костыли:
- В стрелочных функциях этой хуйни нет. Там
argumentsбудет искать снаружи, а если не найдёт — пиши пропало. - Это, можно сказать, дедушка старый. Сейчас все крутые ребята используют rest-оператор (
...args). И сразу получают нормальный массив, а не эту псевдособаку. - Хочешь с ним как с массивом работать? Придётся конвертировать, например, через
Array.from(arguments). А то без методов жить — печалька, блядь.
Короче, знать про него надо, потому что в старом коде его овердохуища. Но для новых дел — ...args и вперёд, без этих плясок с бубном!