Hi Struppi!
Nicht kann sondern wird. Der timeout Aufruf erfolgt immer nachdem Funktion a() fertig ist, da es wie ich schon erwähnte keine Parallele Abarbeitung in JS erfolgt (...)
Stimmt so nicht, Copy und paste Beispiel (*):
schau, wieviele (parallele) alerts du kriegst (vorsicht, Fenster liegen übereinander):
<html>
<head>
<script type="text/javascript">
var count=0;
function a()
{
count++;
if (count<5)
window.setTimeout("a()",2000);
alert ("derzeit laufende Threads:"+count);
count--
}
a();
</script>
</head>
<body>
</body>
</html>
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...
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:
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.
Nein, wo wird eine Kette erzeugt?
Probier mein Beispiel (*) aus (und denk darüber nach, was ohne if Anweisung passieren würde)...
Grüsse,
Richard