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

Верните функцию, которая хранит сумму в замыкании; пустой вызов завершает цепочку, наличие аргумента добавляет число.

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

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

Верните функцию, которая хранит сумму в замыкании; пустой вызов завершает цепочку, наличие аргумента добавляет число.

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

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

Верните функцию, которая хранит сумму в замыкании; пустой вызов завершает цепочку, наличие аргумента добавляет число.

Вариант с независимыми ветвями цепочки:

function sum(...first) {
  function next(total) {
    return function (...args) {
      if (!args.length) return total;
      if (args.length !== 1 || !Number.isFinite(args[0])) throw new TypeError('Одно конечное число');
      return next(total + args[0]);
    };
  }
  const start = next(0);
  return first.length ? start(...first) : 0;
}

sum(2)(1)(2)() вернёт 5, нулевой аргумент не путается с отсутствующим. Здесь sum() возвращает 0, а каждая продолженная ветвь сохраняет собственный накопленный итог.

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

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

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

Подробнее