Javascript "too much recursion" bei Funktionsaufruf



  • jaa also Halloo erstmal...

    Ich hab da ein, najaa, ich will jetzt nicht sagen "Problem", aber irgendwie schon..
    Da ich hier auf Arbeit keinen Zugriff auf meine Daten auf dem Laptop habe, tipp ich mal das Wichtigste ab:

    function moveObject (objectID, toX, toY)
    {
        window.document.getElementById(objectID).style.left = toX+"px";
        window.document.getElementById(objectID).style.top  = toY+"px";
    }
    
    function move_all (points, acttime)
    { /* points ist eine Liste von arrays, acctime ein Zeitstempel, 
         der von PHP geliefert und von js weiterverarbeitet wird
       */
         for (i = 0; i < points.length; i++)
         {
              xn = polX(points["x"],... ); /* neuberechnung der Koordinaten */
              yn = polY(points["y"],... ); /* neuberechnung der Koordinaten */
              moveObject (points[i]["id"], xn, yn);
         }
    }
    
    function caller ()
    {
         move_all (pointlist, parseInt(acttime)+30);
         timer1 = setTimeout (caller(), 30);
    }
    

    Der "too much recursion" error kommt beim Aufruf von move_all() im caller. Ist diese Funktion nicht da, kommt er halt im setTimeout()..

    Kann mir das einer erklären/korrigieren??


  • Mod

    Schmeiss nen Debugger an oder schaue anderweitig nach wie oft move_all() wirklich aufgerufen wird?

    Im Prinzip deutet es nämlich ne endlosrekursion an. Oder aber move_all() ist zu langsam und mittels setTimeout() bombst du move_all() zu, so dass es zu oft paralell ausgeführt wird.

    bedenke bitte: die meisten JS implementationen sind verdammt lahm, du solltest dir also gut überlegen was du mit JS machen willst...



  • Also selbst wenn ich die rekursion auf 10000 stelle, kommt dieser Fehler.. soo langsam kann das Script also garnicht sein..
    Allerdings scheint das ganze Script zu funktionieren wenn ich in moveObject nen alert drin habe..



  • @shade: Welchen Debugger verwendet Du um eine Seite (JS) zu debuggen.
    Für PHP verwende ich ZEND aber JS ist mir nichts bekannt.



  • für firefox gibt es ein jsdebuger der als Extensions eingebunden wird,



  • wenn ich ihn jetzt runterladen könnte, täte ich das doch auch, aber ich komm mit dem Laptop nicht ins Internet..


  • Mod

    Unix-Tom schrieb:

    Welchen Debugger verwendet Du um eine Seite (JS) zu debuggen.

    Für Firefox gibt es den 'Venkman', aber da ich sowieso meistens Opera verwende, verwende ich das eingebaute 'debugging' von Opera.

    Das ist jetzt kein echter Debugger, aber die Fehler ausgaben (JavaScript Console) sind schonmal ordentlichen (nämlich mit backtrace) und dann bietet Opera "opera.postError()" um vernünftig loggen zu können.



  • Die Konsole selbst hat FF auch und ist super. Danke für den Hinweis auf den Debugger.
    Sorry das ich den Thread mißbraucht habe.



  • Soo, ich habs vorhin dann tatsächlich doch noch geschafft..
    Das Problem ist scheinbar wirklich, was wo über wen aufgerufen wird..
    Wie aber genau kann ich nicht sagen.
    Ich schick mal demnächst den code rein


Anmelden zum Antworten