Каскадный сумматор через цепочку вызовов

Завершение нужно проверять по числу аргументов, а не по truthy-значению: ноль является допустимым слагаемым. Пустой вызов печатает накопленную сумму.

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

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

Завершение нужно проверять по числу аргументов, а не по truthy-значению: ноль является допустимым слагаемым. Пустой вызов печатает накопленную сумму.

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

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

Условие

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

Пример работы:

// Пример сумматора:
f(a)(b)(c)(d)   // -> a + b + c + d
f(a)(b)         // -> a + b
f(a)(b)()       // -> console.log(a + b)
f(a)(b)(c)(d)   // -> a + b + c + d

f(a)(b)(c)(d)

function f(x) {
  return (y) => 
    y ? f(x + y) : console.log(x);
}

Ответ

Завершение нужно проверять по числу аргументов, а не по truthy-значению: ноль является допустимым слагаемым. Пустой вызов печатает накопленную сумму.

function f(total) {
  return function (value) {
    if (arguments.length === 0) {
      console.log(total);
      return total;
    }
    return f(total + value);
  };
}
f(1)(0)(2)(); // 3

Исходное условие y ? ... ошибочно завершало цепочку на 0. Вызов f(a)(b)(c) без завершающих () возвращает следующую функцию, а не число и не вывод в консоль. Если нужен другой способ завершения — заданная арность или преобразование к примитиву — его нужно определить отдельно.

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

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

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

Подробнее