Курированная функция для суммирования произвольного количества аргументов

Для произвольного числа слагаемых нужен признак завершения: функция не может сама узнать, будет ли следующий вызов. Например, пустой вызов () возвращает накопленную сумму.

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

Что ответить на собеседовании

Для произвольного числа слагаемых нужен признак завершения: функция не может сама узнать, будет ли следующий вызов. Например, пустой вызов () возвращает накопленную сумму.

Подробный разбор

Ответ с пояснениями

Условие

Реализуйте функцию, которая суммирует любое количество переданных чисел, используя технику каррирования. Функция должна принимать один аргумент за вызов и возвращать новую функцию, ожидающую следующий аргумент, пока не будет получено достаточное количество значений для вычисления суммы.

Ответ

Для произвольного числа слагаемых нужен признак завершения: функция не может сама узнать, будет ли следующий вызов. Например, пустой вызов () возвращает накопленную сумму.

function sum(value) {
  if (arguments.length === 0) return 0;
  function next(number) {
    if (arguments.length === 0) return value;
    return sum(value + number);
  }
  return next;
}
console.log(sum(1)(2)(3)()); // 6

Каждый непустой вызов принимает одно число; пустой — явно выбранный терминатор. При заранее известном количестве аргументов можно вместо этого задать арность и завершаться после неё. Неявное преобразование функции к числу через valueOf — ещё один контракт, но его нельзя молча предполагать из условия.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее