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%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.
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.
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.
Tags und Links jquery recursion continuations