Hi,
var count=0;
fkt a()
{
count++;
if (x=true)
setTimeout(ptr(a()),2000)
//und a() ist hier eben NICHT zwingend zuende:
Nein, aber der naechste Aufruf von a ist hier auch noch NICHT passiert.
Du hast lediglich die Anweisung, a in x Millisekunden erneut aufzurufen, auf einer Art Stack abgelegt.
Der Aufruf erfolgt aber erst spaeter -
alert("Ich bin die aktuell lebende Rekursionsinstanz: " + count);
count--;
}
- und zwar erst, wenn das hier abgearbeitet ist.
Erst dann kommt der Javascript-Interpreter aus der Abarbeitung von a "zurueck", erst *dann* kuemmert er sich wieder darum, was womoeglich noch auf dem "noch Abzuarbeiten"-Stapel liegt.
Man kann weder leugnen, dass die einzelnen Funktionsaufrufe
vor Bestätigung des alerts noch leben,
Natuerlich nicht - auch damit haeltst du den Interpreter so lange an, bis der Nutzer das Fensterchen bestaetigt hat.
noch, dass ein rekursiver Aufruf erfolgt
Doch, das kann man sehr gut leugnen, da bin ich der gleichen Ansicht wie Struppi.
- es werden immmer mehr alerts, und diese entstehen dadurch, dass a() sich selbst (über den Umweg setTimeout()) aufruft.
Nein.
a #1 ist bereits beendet, wenn der Interpreter sich wieder um seinen ToDo-Stack, den du mit setTimeout gefuellt hast, kuemmert. Und erst, wenn er das tut, wird a #2 ausgefuehrt - der Aufruf erfolgt jetzt unabhaengig von a #1, weil das laengst "tot" ist.
Das auf-den-Stapel-legen erfolgte aus a #1 heraus - aber der eigentliche *Aufruf* der Instanz a #2 nicht mehr.
Die entstehenden alerts verdeutlichen übrigens die entstehende Kette...
Die verdeutlichen lediglich eine "Kette" von Funktionsaufrufen, also eine mehrfache Ausfuehrung nacheinander.
Die verdeutlichen *keine* Rekursion.
Weil, da gehe ich mit Struppi d'accord, keine Rekursion stattfindet.
MfG ChrisB