Stefan Ehrenreich: window.setTimeout, heißt das rekursiv ?

hi alle

wenn ich window.setTimeout verwende, und eine funktion immer wieder sich selbst aufrufen lasse, rufe ich diese funktion doch rekursiv auf, d.h. bei jedem aufruf werden die variablen usw der funktion aufs neue gespeichert und ich mülle langsam aber sicher den speicher voll.
oder lieg ich da falsch ? falls nein, gibt es eine andere möglichkeit, eine funktion immer wieder zeitgesteurt aufzurufen ?

gruß stefan

  1. moin

    sofern du die in der funktion verwendeten variablen global definierst passiert das soweit ich weiß nich

    selbst wenn, ich denke nicht, dass die funktion solch immense daten verarbeitet, dass letztendlich die rechenleistung leidet

    ich denke mal dass das nichmal nach 2 tagen der fall sein würde

    gruß

    1. Hallo mech,

      selbst wenn, ich denke nicht, dass die funktion solch
      immense daten verarbeitet, dass letztendlich die
      rechenleistung leidet

      ich denke mal dass das nichmal nach 2 tagen der fall
      sein würde

      Unfug. Gängige JS-Interpreter können Rekursions-Tiefen von
      etwa 256 Stufen erreichen. Die genaue Zahl ist abhängig vom
      Browser.

      Grüße,
       CK

      --
      Ich bewundere wirklich den Sinn der Bienen für kollektive Verantwortung. Obwohl sich einzelne Bienen hin und wieder bekämpfen, herrscht zwischen Ihnen grundsätzlich ein starkes Gefühl für Eintracht und Zusammenarbeit. Wir Menschen gelten als sehr viel weiter entwickelt, doch mitunter rangieren wir sogar hinter kleinen Insekten.
      1. hi

        ich danke euch beiden für die flotte antwort (gibt wohl mehr leute mit schlafstörungen wie mich ;o)  )
        ich komm halt von der programmiererseite her, und es wirkt wie ein rekursiver aufruf, wirklich vorstellen konnte ich's mir aber auch nicht, wär' ja ziemlicher unsinn.
        trotzdem beruhigt mich die kompetente bestätigung.

        danke und gruß stefan

      2. Moin!

        Unfug. Gängige JS-Interpreter können Rekursions-Tiefen von
        etwa 256 Stufen erreichen. Die genaue Zahl ist abhängig vom
        Browser.

        Nein. Das müssen bedeutend mehr sein. Ich hatte mal ein Skript, welches, mit Timeout aufgerufen, etliche Rekursionen mehr gemacht hat. Also sind wahrscheinlich auch rekursive Funktionsaufrufe in _weitaus_ höherer Zahl möglich.

        Es waren wohl ca. 10 Sekunden "Drehbuch" bei Aufruf aller 0.02 Sekunden. Macht dann ca. 500 Rekursionen. Lief im IE und Netscape... wenn der Rechner + Grafik schnell genug war. Ich kann ja mal suchen gehen, müsste irgendwo archiviert sein.

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
        1. Moin!

          Alles klar. Ich habe den Unterschied weiter oben in Deiner Erklärung gefunden.

          MFFG (Mit freundlich- friedfertigem Grinsen)

          fastix®

          --
          Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
  2. Hallo Stefan,

    wenn ich window.setTimeout verwende, und eine funktion
    immer wieder sich selbst aufrufen lasse, rufe ich diese
    funktion doch rekursiv auf,

    Nein. Du benutzt einen Timer, um eine Funktion aufzurufen,
    das ist ein Unterschied. Hierbei wird der Stack immer wieder
    gelöscht. Bei einer Rekursion nicht, da bleibt der Stack
    der aufrufenden Funktion erhalten.

    d.h. bei jedem aufruf werden die variablen usw der funktion
    aufs neue gespeichert und ich mülle langsam aber sicher
    den speicher voll.

    Eben nicht :) Die lokalen Variablen werden nach jedem
    Durchlauf wieder freigegeben.

    Grüße,
     CK

    --
    Wenn gewöhnliche Menschen Wissen erlangen, sind sie weise. Wenn Weise Einsicht erlangen, sind sie gewöhlnliche Menschen.