> Как реализовать функцию add в JavaScript, которая накапливает аргументы и возвращает сумму при вызове без аргументов (JavaScript)

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

Компании: Домклик, Kaspersky

Стек: JavaScript

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

Вот один из элегантных способов реализовать такую функцию с использованием замыкания и переопределения метода valueOf:

JAVASCRIPT
function add(...args) {
const sum = args.reduce((acc, val) => acc + val, 0);
const inner = (...nextArgs) => {
if (nextArgs.length === 0) {
return sum;
}
return add(sum, ...nextArgs);
};
// Позволяет использовать add(1)(2) + 3 или Number(add(1)(2))
inner.valueOf = () => sum;
inner.toString = () => String(sum);
return inner;
}

Как это работает:

  • При вызове add(1)(2)(3)() возвращается сумма всех переданных аргументов.
  • Если вызвать без аргументов (add()), возвращается 0 (сумма пустого массива).
  • Благодаря valueOf и toString, можно использовать результат в арифметических операциях: add(1)(2) + 3 даст 6.

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

JAVASCRIPT
add(1)(2)(3)(); // 6
add(1, 2, 3)(4)(); // 10
add(5)(); // 5
add()(); // 0
add(1)(2) + 3; // 6 (благодаря valueOf)

Этот подход гибкий: поддерживает как цепочки вызовов, так и передачу нескольких аргументов за раз.

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

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