molily: Parameter an Funktion in Funktion übergeben

Beitrag lesen

function test(foo){
    document.getElementById('bla').innerHTML = foo;
    foo++;
    var loop = setInterval(test(foo), 1000);
}

Ich tendiere hier mittlerweile ja zu Currying anstatt ständig neue Funktionen zu erzeugen:

Mit </archiv/2008/12/t180183/#m1190334>:

var loop = window.setTimeout(test.curry(foo), 1000);

Die Funktionsausdrücke sind nämlich Speicherfresser, weil sie eben als Closures wirken und den Scope der umgebenen Funktion bis in alle Ewigkeit erhalten. Der Garbage Collector kann davon auch nichts abräumen. Das ist bei einer Funktion natürlich egal, aber wenn man ständig unzählige Closures erstellt, wird es brenzlig. Auf dicken Rechner merkt man nicht unbedingt, wenn der Speicher volläuft, man hat ja heutzutage Gigabyteweise davon. Aber auf kleineren mobilen Zugangsgeräten merkt man speicherhungrige JavaScripte sehr schnell.

Beim Currying wird natürlich auch nichts anderes als eine Closure angelegt, aber diese schließt kontrolliert das Funktionsobjekt ein sowie einen Array mit den übergebenen Parametern. Das ist auch nicht so toll, weil die auf ewig bestehen bleiben, aber weiter optimieren lässt sich das glaube ich nicht.

Mathias