← Назад к вопросам

Что такое ключевое слово arguments?

2.3 Middle🔥 152 комментариев
#JavaScript Core

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое ключевые слова arguments и rest parameters в JavaScript?

В JavaScript arguments — это специальный объект, доступный внутри тела любой функции (кроме стрелочных), который содержит все аргументы, переданные при её вызове. Это массивоподобный объект, который позволяет работать с аргументами функции, даже если они не были явно объявлены в её параметрах.

Основные характеристики arguments

  • Массивоподобный, но не массив: arguments имеет свойство length и элементы доступны по индексу (arguments[0], arguments[1]), но он не является настоящим массивом. Он не поддерживает методы массива, такие как push, pop, map и т.д.
  • Связь с параметрами: До ES6 изменения в arguments отражаются на соответствующих именованных параметрах, и наоборот (если не использовались параметры по умолчанию или rest).
  • Не доступен в стрелочных функциях: Стрелочные функции не имеют собственного объекта arguments. Если нужно получить аргументы внутри стрелочной функции, следует использовать rest parameters или обратиться к arguments окружающей обычной функции.

Пример использования arguments

function sumAll() {
    let total = 0;
    // arguments.length позволяет обработать любое количество аргументов
    for (let i = 0; i < arguments.length; i++) {
        total += arguments[i];
    }
    return total;
}

console.log(sumAll(1, 2, 3));       // 6
console.log(sumAll(10, 20, 30, 40)); // 100

В этом примере функция sumAll не имеет объявленных параметров, но может принимать любое количество аргументов благодаря объекту arguments.

Преобразование arguments в настоящий массив

Для использования методов массива, arguments часто преобразуют в настоящий массив. До ES6 это делалось, например, с помощью Array.prototype.slice.

function logArguments() {
    // Преобразование arguments в массив (старый способ)
    const argsArray = Array.prototype.slice.call(arguments);
    console.log(argsArray.map(arg => arg * 2));
}

logArguments(1, 2, 3); // Выведет [2, 4, 6]

Отличия от современных rest parameters (ES6)

С появлением ES6 был введен более элегантный и мощный способ работы с произвольным количеством аргументов — rest parameters. Он позволяет собирать "остальные" аргументы в настоящий массив.

// Использование rest parameter (...args)
function sumAllRest(...args) {
    // args — это уже настоящий массив
    return args.reduce((total, current) => total + current, 0);
}

console.log(sumAllRest(1, 2, 3)); // 6

Ключевые различия между arguments и rest parameters:

  1. Тип объекта: arguments — массивоподобный объект, rest parameters (...args) — настоящий массив.
  2. Явное объявление: rest parameters явно объявляются в списке параметров функции с помощью синтаксиса ..., в то время как arguments "волшебно" появляется в любой функции.
  3. Доступность в стрелочных функциях: rest parameters могут использоваться в стрелочных функциях, arguments — нет.
  4. Селективность: rest parameters могут собирать только "остальные" аргументы, после явно объявленных параметров. arguments содержит все аргументы без разбиения.
function demonstrate(a, b, ...rest) {
    console.log('Named param a:', a);       // 1
    console.log('Named param b:', b);       // 2
    console.log('Rest params (array):', rest); // [3, 4, 5]
    // arguments содержит всё: [1, 2, 3, 4, 5]
    console.log('All arguments:', arguments);
}

demonstrate(1, 2, 3, 4, 5);

Современные рекомендации по использованию

В современном JavaScript (ES6+) использование rest parameters предпочтительнее объекта arguments.

  • Rest parameters обеспечивают лучшую читаемость кода, явно показывая в сигнатуре функции, что она принимает переменное число аргументов.
  • Так как rest parameters являются настоящим массивом, с ними можно сразу использовать все мощные методы Array.prototype, без дополнительного преобразования.
  • Они устраняют неочевидное поведение связи между arguments и именованными параметрами.

Объект arguments сегодня считается в большей степени устаревшим (legacy) механизмом. Его понимание важно для работы с старым кодом или для глубокого понимания языка, но в новом коде следует использовать rest parameters.

Итог: arguments — это исторический, массивоподобный объект для доступа ко всем аргументам функции. Rest parameters (...) — его современная, более удобная и мощная альтернатива, возвращающая настоящий массив. Для написания чистого и поддерживаемого кода на ES6+ стоит выбирать rest parameters.

Что такое ключевое слово arguments? | PrepBro