js hat keine nebenläufigkeiten, wird in einem thread abgearbeitet.
jeder js-zweig läuft vollständig durch, ehe der nächste abgearbeitet wird.
wenn du ins html 2 scripte einbindest, wird der globale code des 1. in die ablauf-queue eingetragen und abgearbeitet.
dann erst wird das 2. script geladen, und dessen globaler code in die ablauf-queue eingetragen und abgearbeitet.
registrieren diese script eventhandler und das entsprechende event schlägt zu, wird der entsprechende handlercode in die ablauf-queue eingetragen und abgearbeitet wenn aller code vorher abgearbeitet wurde.
diese arbeitsweise ist bedingung für konsistenten code in js.
wenn ich also folgenden code irgendwo stehen habe
Code:
document.body.innerHTML += '<div id="test"></div>';
...
document.getElementById('test').innerHTML = 'test';
kann ich mich darauf verlassen, dass der funktioniert, egal was in ... steht(solange ich dort nicht selbst das element wieder entferne), da jede weitere benutzeraktion, welche dafür sorgen könnte dass dieses element wieder gelöst wird
Code:
document.body.innerHTML = "Au weia";
erst dann ausgeführt wird, wenn der 1. code vollständig abgearbeitet wurde.
sprich
Code:
setTimeout(function()
{
document.body.innerHTML = "Au weia";
}, 0);
document.body.innerHTML += '<div id="test"></div>';
...
document.getElementById('test').innerHTML = 'test';
sind 2 codezweige, der globale code, der den timeout-event-handler registriert, dann das div mit id="test" im dom erzeugt, dann irgendwas(...) macht und dann auf das div mit id="test" zugreift.
der 2. codezweig ist der code des timeout-event-handlers, der im dom alle kindelemente von body löscht und einen textknoten "Au weia" erzeugt.
da der timeout auf 0 gesetzt wurde, kommt das timeout-event sofort, also während der globale code noch abgearbeitet wird. der code des timeout-event-handlers wird aber nur in die ablauf-queue eingetragen, abgearbeitet wird er erst, wenn der globale code vollständig abgearbeitet wurde.
wenn jetzt aber an stelle von ... alert("irgendwas") steht, wird an dieser stelle die alertbox(ein modaler dialog)angezeigt und die codeausführung geht erst weiter, wenn die alertbox weggeklickt wurde.
bisher war es so, daß solange auf das wegklicken der alertbox gewartet wurde, die anderen codezweige abgearbeitet wurden, obwohl der codezweig mit dem alert ja noch nicht vollständig abgearbeitet wurde. das darf in js eigentlich nicht passieren.
in unserem beispiel wurde(wird im ff immer noch) also der code des timeout-event-handlers abgearbeitet, welcher alle elemente unter body löscht.
wenn dann der globale code weiter abgearbeitet wird, weil die alertbox weggeklickt wurde, und wir dort auf das div mit id="test" zugreifen wollen war es aber schon gelöscht.
Und was bedeutet das für uns (Hobby) Entwickler?
vermutlich nichts