Javascript ist Single-Threaded, dh es wird jeweils nur eine Anweisung nacheinander ausgeführt.
Das Ereignissystem wird wie in vielen anderen Sprachen und Bibliotheken von einer Ereignisschleife verwaltet. Die Ereignisschleife ist im Grunde eine Schleife, die bei jeder Iteration nach Nachrichten in der Warteschlange sucht und Ereignisse auslöst.
In Javascript (wie in vielen Sprachen, die dieses Muster implementieren) wird die Ereignisschleife aufgerufen, wenn der Stapel leer ist, dh wenn alle Funktionen am Ende des Programmcodes zurückgegeben werden, dh.
Ihr "echtes" Programm sieht hinter den Kulissen ungefähr so aus:
var run = true, i = 0;
setTimeout(function(){ run = false; }, 1);
while(run){ i++; }
while(true) {
processEvents();
}
Die Nachricht von der Uhr, dass das Zeitlimit abgelaufen ist, wird also nie verarbeitet.
Weitere Informationen zur Ereignisschleife finden Sie unter:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/EventLoop
Natürlich ist es etwas komplexer. Sehen Sie sich hier die folgenden Beispiele an: Ist JavaScript garantiert Single-Threaded? ( tl; dr: In einigen Browser-Engines sind einige externe Ereignisse nicht von der Ereignisschleife abhängig und werden sofort ausgelöst, wenn sie auftreten, wodurch die aktuelle Aufgabe verhindert wird. Dies ist jedoch bei setTimeout nicht der Fall, bei dem lediglich eine Nachricht zur Warteschlange hinzugefügt wird und feuert nie sofort.)