Stimmt so nicht, Copy und paste Beispiel (*):
schau, wieviele (parallele) alerts du kriegst (vorsicht, Fenster liegen übereinander):
Du verwechselst einige Dinge, das hat nichts mit Parralell zu tun. Die alert() Fenster gehen auf weil du die Funktion aufrufst ohne dass dort etwas parallel abläuft.
Deutlich was passiert wird es mit diesem Skript:
function a()
{
D('start a( '+ ++count +')');
if (count<5) window.setTimeout("a()",1);
for(var i = 0; i < 10000; i++) {var x = Math.sin(1);}
D('ende a( '+ count +')');
}
a();
Die Schleife dauert garantiert immer länger als 1 Millisekunde, trotzdem werden die Timeouts schön nacheinander abgearbeitet. Keine Spur von Parallele Tätigkeiten.
Nach deiner Theorie ja nur einen, weil der timeout vor Beendigung von a() nicht ausgeführt wird und a vor bestätigen des alerts ja nicht beendet wäre. Mein FF generiert 5 alerts in 10 Sekunden...
Die alerts() sind unabhängig davon, du kannst unzählige alert mit timeout erzeugen.
und selbst wenn, wäre es kein Rekursiveraufruf, den Unterschied habe ich dir ja gezeigt und erklärt. Bei einem Rekursiven Aufruf werden die Variabeln auf den Stack gelegt und sind stehen dem Aufruf wieder zu Verfügung, das ist ein wichtiger Aspekt, der bei deiner These nicht erfüllt ist.
Eine Rekursion benötigt nicht zwingend Variable auf dem Stack:
Doch.
sei dies "www.foo.bar.undefined":
<html>
<head>
<script>
function (a)
{
var jetzt = new Date();
var name = "w" + getTime());
window.open("www.foo.bar.undefined", name)
}
</script>
</head>
<body>
<p> ich bin eine Instanz </p>
</body>
</html>ist z.B. auch eine Rekursion.
Das stimmt, das ist gewissermaßen ein Rekursiver Aufruf in einem komplexen System, jede Instanz hat einen Vorgänger: opener, darüber kannst du die komplette Kette durchlaufen. Das ist aber in dem Beispiel mit timeout nicht der Fall.
Nein, wo wird eine Kette erzeugt?
Probier mein Beispiel (*) aus (und denk darüber nach, was ohne if Anweisung passieren würde)...
Das ist keine Kette, eine Kette hat Glieder die miteinander verbunden sind und die existieren in dem Beispiel nicht.
Hast du dir die Meldung (im FF) mal angeschaut von
function A() { A();};
A();
Dann hast du es schwarz auf weiß. Und jetzt zeig mir eine ähnliche Meldung mit einem Timeout.
Struppi.