Hi Struppi!
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.
Meiner Meinung nach verwechselst du einige Dinge; Dein Beispiel wird nur deshalb "Quasisequenziell" abgearbeitet, da (sei D eine Ausgabefunktion innerhalb des Fensters) die komplette dynamische Aktualisierung (redraw) eines Fensters immer erst nach dem Beenden einer Javascriptfunktion vorgenommen wird.
Deshalb werden nach aufruf a()[x] auch immer start[x]/ende[x] quasi zeitgleich ausgegeben (kannst du ja mal prüfen) und dann erst start[x+1]/ende[x+1], auch hier der redraw nach Funktionsende; die Ausgabe erfolgt nach a()[x], weil a()[x+1] später gestartet wurde und die Laufzeit gleich ist.
Mein Beispiel war schon korrekt, denn alert() ist normalerweise blockierend, d.h. die Javascriptfunktion hält an der Stelle, an der ein Alert ausgegeben wird, an. Somit müsste (nach deiner Aussage) auch der timeout auf das Bestätigen des Alerts warten, da ja die aufrufende a()[x] Funktion offensichtlich noch nicht beendet ist.
Dies passiert aber nicht.
Ich denke von meiner Seite ist alles dazu gesagt - und ich glaube nicht, dass ich noch weiter was dazu erklären kann.
Deshalb nicht böse sein, aber ich zieh mich hiermit aus der Diskussion zurück.
Viele Grüsse,
Richard