W ramach wyzwania programistycznego mamy za zadanie utworzenie funkcji o nieokreślonej liczbie kolejnych wywołań. Jako przykład, powiedzmy, że funkcja zwraca po prostu sumę przewidzianych argumentów, to powinno działać w następujący sposób:Tworzenie funkcji z nieokreśloną liczbą kolejnych wywołań
sum(4)() // 4
sum(4)(5)() // 9
sum(4)(5)(9)() // 18
sum(4)(5)(9)(1)() // 19
// etc...
Problemem jest uproszczona przez Dozwolone wywołanie funkcja pusta w końcu jako wskazanie koniec rozmowy .
Pracowałem nad rozwiązaniem, dokłada zadanie, ale przy użyciu zmiennych globalnych wewnątrz funkcji samego:
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;
};
to rozwiązanie działa, ale używa stan, zmienne globalne i funkcja obiektu sztuczek, które nie jest idealny. Moje pytanie dotyczy tego, czy istnieje sposób na rozwiązanie problemu w sposób czysto rekurencyjny.
Na marginesie nie uważam, że problem można rozwiązać, jeśli nie podano ostatniego pustego połączenia (), ale jeśli się mylę, proszę dać mi znać.
Aktualizacja
Kwestia ta została udzielona odpowiedź inspekcja kodu: https://codereview.stackexchange.com/a/153999/129579
Rozwiązanie NEET, które nie opierają się na globalny zasięg i jest czysto funkcjonalne.
wygląda to jak należy się inspekcja kodu – mplungjan
Może warto w tym linku: http://codereview.stackexchange.com/ –
Czy badałeś currying? – epascarello