> Что такое псевдомассив arguments в JavaScript? (JavaScript, TypeScript)

Уровень: junior · Роль: frontend · Категория: Технические вопросы

Компании: Газпромбанк

Стек: JavaScript, TypeScript

> Пример ответа

Короткий ответ

arguments - это встроенный псевдомассив, доступный внутри обычных (не arrow) функций. Он содержит все переданные в функцию аргументы, включая те, что не объявлены в параметрах. У него есть свойство length и индексы, но нет методов массива (push, map и т.д.). В современном коде вместо него используют rest-параметры (...args).

Подробное объяснение

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

Ключевые особенности:

  • Доступен только внутри обычных функций, не работает в arrow-функциях
  • Имеет числовые индексы (0, 1, 2...) и свойство length
  • Не наследует методы прототипа Array (например, forEach, filter)
  • В строгом режиме ('use strict') arguments не синхронизируется с именованными параметрами

В TypeScript arguments типизируется как IArguments - интерфейс с индексами и length. Для работы с ним как с массивом нужно преобразование: Array.from(arguments) или spread-оператор.

На практике

В современной разработке arguments практически не используется. Основные причины:

  • Arrow-функции не имеют своего arguments, что приводит к путанице
  • Rest-параметры (...args) дают настоящий массив со всеми методами
  • TypeScript лучше работает с rest-параметрами, чем с arguments

Исключение - поддержка очень старого кода или ситуации, когда нужно обработать произвольное количество аргументов без использования rest-параметров (например, в polyfill'ах).

Пример кода

JAVASCRIPT
// Старый подход с arguments
function sumOld() {
let total = 0;
for (let i = 0; i < arguments.length; i++) {
total += arguments[i];
}
return total;
}
// Современный подход с rest-параметрами
function sumNew(...args: number[]): number {
return args.reduce((acc, val) => acc + val, 0);
}
// Преобразование arguments в массив
function convertArgs() {
const argsArray = Array.from(arguments);
return argsArray.map(x => x * 2);
}

Как отвечать на собеседовании

Начни с определения: "arguments - это псевдомассив всех аргументов функции". Сразу укажи, что он не работает в arrow-функциях. Объясни разницу между псевдомассивом и настоящим массивом. Упомяни, что в современном коде предпочтительнее rest-параметры. Если собеседник спрашивает про TypeScript, добавь про типизацию и преобразование.

Что проверяет интервьюер

  • Понимание разницы между array-like и настоящим массивом
  • Знание особенностей работы arguments в разных режимах (strict mode)
  • Осведомлённость о современных альтернативах (rest-параметры)
  • Понимание, почему arguments не работает в arrow-функциях

Типичные ошибки

  • Утверждение, что arguments - это массив (это псевдомассив)
  • Попытка использовать методы массива напрямую на arguments без преобразования
  • Использование arguments внутри arrow-функции (будет ошибка или неожиданное поведение)
  • Забывание, что в strict mode arguments не синхронизируется с параметрами функции

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью