Ist Continuation-Style-Programmierung anfällig für Stack-Überlauf

9

Als Antwort auf diese Frage über jQuery-Effekte habe ich überlegt, das Argument callback für .fadeIn( 500, my_function ) zu verwenden.

Obwohl dies im Prinzip eine brauchbare Idee ist, habe ich keine Ahnung (und auch nicht die jQuery-Dokumentation :(), wenn der Callback rekursiv ist:

%Vor%     
xtofl 18.02.2011, 15:04
quelle

3 Antworten

3

Sie könnten einen Debugger-Haltepunkt hinzufügen und testen, ob die Stapelgröße zunimmt oder nicht. :)

Da Animationen / Überblendungen jedoch setTimeout / setInterval verwenden, schätze ich sehr, dass die Aufruftiefe nicht zunimmt, d. h. es ist nicht anfällig für Stapelüberläufe.

    
ThiefMaster 18.02.2011, 15:10
quelle
1

Ich habe mir die Zeit genommen, die Leute zu fragen, die wer weiß '... Da es keine explizite Rekursion gibt, gibt es keinen Stack-Overflow: Die Methoden fadeIn , fadeOut ... erstellen nur einen Eintrag in der Effekt-Queue. Das bedeutet, dass die Funktion keep_animating nicht im selben Kontext ausgeführt wird.

Mit freundlicher Genehmigung dave metvin :

  

Was Sie als "Rekursion" beschreiben   ist eigentlich keine Rekursion. jQuery's   visuelle Effekte werden auf einem setTimeout ausgeführt   Timer, so ist die Rückruffunktion nicht   Lauf sofort so, wie es wäre   Rekursion. Stattdessen wird der Rückruf ausgeführt   nachdem die Animation abgeschlossen ist   mehrere "Schritte", jeweils ausgelöst durch a   setTimeout.

    
xtofl 21.02.2011 08:47
quelle
0

Ihre Lösung wird rekrutieren und den Stack schließlich ausblasen - aber Sie werden eine ganze Weile haben - abhängig vom Browser - bis es funktioniert. Für eine schnelle Demo ist das in Ordnung, aber für den produktionsbereiten Code sollten Sie einen nicht-rekursiven Ansatz wählen, wie zum Beispiel:

%Vor%

Es gibt viele Möglichkeiten, dies auszublenden, aber Sie sollten dorthin gelangen.

    
ndp 18.02.2011 16:27
quelle

Tags und Links