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