Пустой вызов возвращает накопленную сумму; непустой создаёт следующий шаг цепочки. Завершение проверяйте по arguments.length, чтобы ноль не прерывал накопление.
Создание функции с поддержкой каррирования
Пустой вызов возвращает накопленную сумму; непустой создаёт следующий шаг цепочки. Завершение проверяйте по arguments.length, чтобы ноль не прерывал накопление.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо написать функцию, которая поддерживает последовательные вызовы с одним аргументом и возвращает текущую сумму только при вызове без аргументов. Поведение функции должно соответствовать следующим примерам:
sum() == 0
sum(1)() == 1
sum(1)(4)() == 5
sum(5)(2)(2)() == 9
Функция должна корректно обрабатывать любое количество вложенных вызовов, аккумулируя переданные числа и выдавая их сумму в момент, когда вызов происходит без параметров.
Ответ
Пустой вызов возвращает накопленную сумму; непустой создаёт следующий шаг цепочки. Завершение проверяйте по arguments.length, чтобы ноль не прерывал накопление.
function sum(value) {
if (arguments.length === 0) return 0;
return function next(number) {
if (arguments.length === 0) return value;
return sum(value + number);
};
}
sum() даёт 0, sum(1)(4)() — 5, sum(5)(2)(2)() — 9. Аргументы предполагаются числами; без завершающего пустого вызова результатом остаётся функция. Каждый шаг хранит своё накопленное значение, поэтому ранее полученные частичные цепочки можно использовать независимо.