1. Vier Konzepte 1. JavaScript ist Single-Threaded Single-Threaded bedeutet, dass unser 2. AufgabenwarteschlangeUm das oben erwähnte Warteschlangenproblem zu lösen, wird eine Aufgabenwarteschlange erstellt. Wenn der Browser eine asynchrone Aufgabe mit einem Ergebnis hat, wird diese zur späteren Ausführung der Aufgabenwarteschlange hinzugefügt, und andere Aufgaben werden synchron im Hauptthread ausgeführt. Hierbei ist zu beachten, dass das Hinzufügen von Aufgaben zur Aufgabenwarteschlange erfolgt, nachdem die asynchrone Aufgabe ein Ergebnis aufweist. Tatsächlich existiert in der Aufgabenwarteschlange die Rückruffunktion der asynchronen Aufgabe. 3. Synchrone Aufgaben und asynchrone AufgabenSynchrone Aufgaben in Js-Programmen beziehen sich auf Aufgaben, die im Hauptthread ausgeführt werden, und asynchrone Aufgaben beziehen sich auf Aufgaben, die in die Aufgabenwarteschlange gelangen. 4. Javascript-AusführungsstapelAlle synchronen Aufgaben werden auf dem Hauptthread ausgeführt und bilden einen Ausführungsstapel. Wenn die Aufgabe im Hauptthread abgeschlossen ist, wird sie zur Ausführung aus der Aufgabenwarteschlange genommen. var name = "zhouwei"; setzeTimeout(() => { konsole.log(1); }, 1000); konsole.log(Name); Der obige Code wird im Browser wie folgt ausgeführt. Unter dem Code der globalen Ausführungsumgebung des Programms verstehen wir den in einer Hauptfunktion verpackten Code. Der Ausführungsstapel dieses Codes ändert sich wie in der folgenden Abbildung dargestellt:
Ereignisschleife Der Prozess, bei dem der Js-Ausführungsstapel kontinuierlich Aufgaben aus der Aufgabenwarteschlange liest und ausführt, wird als Wir wissen, dass die Aufgabenwarteschlange die Ergebnisse asynchroner Aufgaben speichert. Was sind also asynchrone Aufgaben?
Es gibt viele Ereignisse in
Die asynchronen Task-Rückrufe, die in die Task-Warteschlange gelangen, werden in Makrotasks und Mikrotasks unterteilt. Die Regeln für den Js-Ausführungsstapel zum Ausführen von Makrotasks und Mikrotasks sind in der folgenden Abbildung dargestellt. Der Js-Ausführungsstapel führt zuerst eine Makroaufgabe aus (globaler Code) -> liest alle Mikroaufgaben aus der Aufgabenwarteschlange -> UI-Rendering (Browser-Rendering-Schnittstelle) -> liest eine Makroaufgabe aus der Aufgabenwarteschlange -> alle Mikroaufgaben -> UI-Rendering -> …
Was sind Makroaufgaben?
Was sind Mikroaufgaben?
Problem mit der setTimeout-Verzögerung Im Allgemeinen ist die Ausführungszeit des Rückrufs in 3. Tatsächlicher KampfÜben Sie die folgende Codeausgabe: konsole.log(1); setzeTimeout(() => { konsole.log(2); Versprechen.auflösen().dann(() => { console.log(3) }); }); neues Versprechen(lösen => { konsole.log(4); setzeTimeout(() => { konsole.log(5); }); Entschlossenheit(6) }).dann(Daten => { konsole.log(Daten); }) setzeTimeout(() => { konsole.log(7); }) konsole.log(8); Verwenden Sie den oben erwähnten JS-Ausführungsmechanismus, um diese Frage zu analysieren: 1: Führen Sie die synchrone Codeausgabe in der globalen Aufgabe aus:
Hierbei ist zu beachten, dass es sich bei der von 2: Zu diesem Zeitpunkt befinden sich drei // Die Makroaufgabe zu diesem Zeitpunkt ist setTimeout(() => { konsole.log(2); Versprechen.auflösen().dann(() => { console.log(3) }); }); setzeTimeout(() => { konsole.log(5); }); setzeTimeout(() => { konsole.log(7); }) // Zu diesem Zeitpunkt ist die Mikrotask dann (Daten => { konsole.log(Daten); })
3: Führen Sie dann die erste Makroaufgabe aus setzeTimeout(() => { konsole.log(2); Versprechen.auflösen().dann(() => { console.log(3) }); });
In dieser Makrotask wird der Aufgabenwarteschlange eine Mikrotask hinzugefügt. An diesem Punkt enthält die Aufgabenwarteschlange eine neue Mikroaufgabe. 4: Führe eine Mikroaufgabe aus, Ausgabe: 3 dann(() => { console.log(3) }); 5: Führen Sie die Aufgabe weiterhin gemäß den Regeln aus. Ausgabe: 5, 7 Die Gesamtausgabe ist:
Ist das Ihre Antwort? Zusammenfassen:
Dies ist das Ende dieses Artikels über den Ereignisschleifenmechanismus des Das könnte Sie auch interessieren:
|
<<: So implementieren Sie eine Paging-Abfrage in MySQL
>>: Mehrere CSS3-Tag-Abkürzungen (empfohlen)
Eine Optimierungslösung, wenn ein einzelner MySQL...
1. Entpacken Sie nginx-1.8.1.tar.gz 2. Entpacken ...
<br />So entfernen Sie die Trennlinien einer...
Vorwort Es besteht ein Missverständnis bezüglich ...
1. Nach der Installation von MySQL 5.6 kann es ni...
1. Einleitung Durch Aktivieren des Slow Query Log...
Umfeld Hostname IP-Adresse Aufschlag Prometheus 1...
Benutzer- und Gruppenverwaltung 1. Grundlegende K...
Wenn Browser-Anbieter die Standards umgehen und ei...
Installieren Sie zuerst postcss-pxtorem: npm inst...
Dieser Artikel stellt RHEL8-Netzwerkdienste und N...
Inhaltsverzeichnis 1. Vorbereitung: 2. Quellcode-...
Entwickeln Sie ein Zahlenratespiel, bei dem zufäl...
1. Inline-Referenz: Wird direkt auf dem Etikett v...
Inhaltsverzeichnis 1. Array-Dekonstruktion 2. Obj...