Для произвольного числа слагаемых нужен признак завершения: функция не может сама узнать, будет ли следующий вызов. Например, пустой вызов () возвращает накопленную сумму.
Курированная функция для суммирования произвольного количества аргументов
Для произвольного числа слагаемых нужен признак завершения: функция не может сама узнать, будет ли следующий вызов. Например, пустой вызов () возвращает накопленную сумму.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте функцию, которая суммирует любое количество переданных чисел, используя технику каррирования. Функция должна принимать один аргумент за вызов и возвращать новую функцию, ожидающую следующий аргумент, пока не будет получено достаточное количество значений для вычисления суммы.
Ответ
Для произвольного числа слагаемых нужен признак завершения: функция не может сама узнать, будет ли следующий вызов. Например, пустой вызов () возвращает накопленную сумму.
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 — ещё один контракт, но его нельзя молча предполагать из условия.