Wie allgemein bekannt ist, ist Javascript eine Single-Thread-Sprache, aber warum können wir asynchrone Operationen verwenden? Weil asynchrone Vorgänge von einem Browser mit Multithread- und Multiprozessfähigkeiten ausgeführt werden. Javascript läuft durchgehend in einem einzelnen Thread und wird dem Browser zur Ausführung übergeben, wenn asynchroner Code entdeckt wird. Der Browser ruft dann den entsprechenden Thread oder Prozess auf, einschließlich HTTP-Anfrage, GUI, Ereignisauslösung usw., um diese asynchronen Operationen zu verarbeiten .
Im Allgemeinen können Javasctip-Aufgaben in drei Kategorien unterteilt werden: Synchronisierungsaufgabe, Mikroaufgabe und Makroaufgabe, die in der Reihenfolge der Synchronisierung ausgeführt werden -> Mikro -> Makro. Der Synchronisierungscode wird zuerst ausgeführt. Anschließend stellt der Browser den Mikrocode in eine Mikroaufgabenwarteschlange ein und wartet darauf, dass die Synchronisierungsaufgabe abgeschlossen wird. Außerdem stellt er den Makrocode in eine Makroaufgabenwarteschlange ein und wartet darauf, dass der Mikrocode abgeschlossen wird.
Diese Prioritätsreihenfolge ähnelt dem Planungsalgorithmus für Feedback-Warteschlangen auf mehreren Ebenen unter Betriebssystemen.
Allgemeine Mikroaufgabe: Promise.then(), Promise.catch(), new MutationObserver(), process.nextTick()
allgemeine Makroaufgabe: setTimeout, setInterview, requestAnimationFrame()
process.nextTick() ist übrigens weder eine Mikroaufgabe noch eine Makroaufgabe und wird einfach nach dem Synchronisierungscode und vor der Mikroaufgabe ausgeführt.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Javascript-Ereignisschleifenregeln. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!