В рамках задачи программирования нам поручено создать функцию с неопределенным количеством последовательных вызовов. В качестве примера, скажем, функция возвращает просто сумма предоставленных аргументов, он должен работать следующим образом:Создайте функцию с неопределенным числом последовательных вызовов
sum(4)() // 4
sum(4)(5)() // 9
sum(4)(5)(9)() // 18
sum(4)(5)(9)(1)() // 19
// etc...
Проблема упрощается при вызове разрешенной пустой функции в конце как признак конца вызовов ,
Я работал над решением, которое делает работу, но используя глобальные переменные внутри самой функции:
var sum = function (a) {
if (!sum.init) {
sum.total = 0;
sum.init = true;
}
if (!arguments.length) {
sum.init = false;
return sum.total;
}
sum.total += a;
return sum;
};
Это решение работает, но использует состояние, глобальные переменные и функции объекта фокусы, не является идеальным. Мой вопрос здесь в том, есть ли способ решить проблему чисто рекурсивным образом.
В качестве побочного примечания я не считаю, что проблема может быть решена, если этот последний пустой вызов () не предоставляется, но если я ошибаюсь, сообщите мне.
Update
Этот вопрос был дан ответ на Просмотр Кода: https://codereview.stackexchange.com/a/153999/129579
неет решение, которое не опирается на глобальную область видимости и является чисто функциональным.
Это выглядит, как он относится на Просмотр Кода – mplungjan
Может быть стоит в том числе ссылке://codereview.stackexchange.com/ –
Вы изучали карри? – epascarello