Grundlagen der Webtechnologien
console.log('A');
setTimeout(() => console.log('B'), 0);
Promise.resolve().then(() => console.log('C'));
console.log('D');In welcher Reihenfolge erscheinen die Zeichen in der Konsole, wenn das obige JavaScript im Browser ausgeführt wird?
- AA → B → C → D
- BA → D → B → C
- CA → D → C → B
Antwort und Erläuterung anzeigen
Antwort: C. A → D → C → B
Das JavaScript einer Seite läuft in einem einzigen Hauptthread, und keine andere Verarbeitung kommt dazwischen, bis der gerade laufende Code fertig ist. Zuerst läuft der gesamte synchrone Code, und A und D werden ausgegeben. Die an then des Promise übergebene Funktion wird als Mikrotask unmittelbar nach dem Ende des aktuellen Codes ausgeführt, daher erscheint als Nächstes C. Auch wenn setTimeout 0 ms erhält, wird die Funktion als Task in die Warteschlange gestellt, und die Event Loop holt sie erst heraus, nachdem die Mikrotasks erledigt sind; deshalb kommt B zuletzt.