Завершение нужно проверять по числу аргументов, а не по 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) без завершающих () возвращает следующую функцию, а не число и не вывод в консоль. Если нужен другой способ завершения — заданная арность или преобразование к примитиву — его нужно определить отдельно.