Hier ist eine Frage zu Makroaufgaben und Mikroaufgaben: setzeTimeout(Funktion(){ konsole.log('1') }); neues Versprechen(Funktion(Auflösung){ konsole.log('2'); lösen(); }).dann(Funktion(){ konsole.log('3') }); konsole.log('4') Wie ist die Ausführungsreihenfolge des obigen Codes?
Ich schätze, die Überlegung ist: Weiß ich nicht, dass js zeilenweise ausgeführt wird? Ich war etwas in Panik und habe es in den Browser eingefügt, um es mir anzusehen: Unglaublich Verwirrt, ich kann den Betriebsmechanismus von JavaScript nur sorgfältig studieren! 1. Über JavaScript 2. JavaScript-EreignisschleifeDa JS ein Single-Thread ist, ist es wie eine Cafeteria mit nur einem Fenster. Die Schüler müssen sich einzeln anstellen, um ihr Essen zu bekommen. Ebenso müssen JS-Aufgaben einzeln nacheinander ausgeführt werden. Dieser Modus ist einfach auszuführen, aber mit zunehmenden zukünftigen Anforderungen, Transaktionen und Anfragen wird die Ausführungseffizienz dieses Single-Thread-Modus zwangsläufig geringer. Solange die Ausführung einer Aufgabe lange dauert, können die nachfolgenden Aufgaben während dieser Zeit nicht ausgeführt werden. Es kommt häufig vor, dass hochauflösende Bilder in Nachrichten sehr langsam geladen werden. Sollte unsere Webseite hängen bleiben, bis die Bilder vollständig angezeigt werden? Um dieses Problem zu lösen, unterteilt die JavaScript-Sprache die Aufgabenausführungsmodi in synchron und asynchron:
Wenn wir den Inhalt der Karte in Worte fassen:
Mit Codeausdruck: lass Daten = []; $.ajax({ url:blog.csdn.net, Daten:Daten, Erfolg:() => { console.log('Erfolgreich gesendet!'); } }) console.log('Codeausführung beendet'); Das Obige ist ein einfacher Ajax-Anforderungscode:
Ich glaube, dass Sie durch den obigen Text und Code ein vorläufiges Verständnis der Ausführungsreihenfolge von js haben. Dies ist jedoch auch der Grund, warum einige Freunde mit 2, 4, 1, 3 geantwortet haben. Tatsächlich gibt es jedoch immer noch Tricks in der asynchronen Warteschlange. In unserer Interviewfrage befinden sich sowohl 3. Makroaufgaben und MikroaufgabenJeder versteht darunter etwas anderes, da Makrotasks und Mikrotasks kein Standard sind, die Reihenfolge der Ausführung jedoch in js einheitlich ist. Makroaufgaben:
Mikroaufgaben:
Zu den Makroaufgaben gehören : <script> Gesamtcode, process.nextTick variiert zu stark, verschiedene Knoten werden nicht einheitlich ausgeführt und es gibt keinen Standard Tipp: Manche Leute packen den gesamten <script>-Code gerne in eine Makroaufgabe, aber ich persönlich mag das nicht. In meinem Fall ist es nur der Hauptausführungsthread. Ich persönlich klassifiziere sowohl Makroaufgaben als auch Mikroaufgaben als asynchrone Aufgaben! Schauen wir uns die Interviewfrage noch einmal an: //Callback ist eine asynchrone Aufgabe setTimeout(function(){//Makroaufgabe console.log('1') }); neues Versprechen(Funktion(Auflösung){ console.log('2');//Hauptthread synchronisieren resolve(); }).dann(Funktion(){//Mikrotask-Konsole.log('3') }); console.log('4') //Hauptthread synchronisieren
Daher: Die Ergebnisse sind 2, 4, 3, 1! Lassen Sie uns darüber hinaus näher darauf eingehen: setTimeout(() => {//Makro-Task-Warteschlange 1 console.log('1'); //Makro-Aufgabe Team 1 Aufgabe 1 setTimeout(() => {//Makroaufgabenwarteschlange 3 (Makroaufgabe in Makroaufgabenwarteschlange 1) konsole.log('2') }, 0) neues Versprechen(lösen => { lösen() console.log('3') //Makro-Task-Warteschlange 1 Task 2 }).then(() => {//Mikrotask in Makrotask-Warteschlange 1 console.log('4') }) }, 0) setTimeout(() => {//Makro-Task-Warteschlange 2 konsole.log('5') }, 0) console.log('6') //Hauptthread synchronisieren
Was gibt der obige Code aus? 4. Erweitern Sie Makrotasks und MikrotasksDie obige Frage ist kompliziert. Vielleicht möchten Sie darüber nachdenken. Wie sollten wir sie in dieser komplizierten Situation Schritt für Schritt ausführen?
Nach der Überprüfung ist das Ergebnis korrekt! Dies ist das Ende dieses Artikels über Makroaufgaben und Mikroaufgaben in js. Weitere relevante Makroaufgaben und Mikroaufgaben in js finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Einige Vorschläge zur Verbesserung der Nginx-Leistung
>>: Eine Zusammenfassung der Fuzzy-Abfrage von MySQL wie
K8s k8s ist ein Cluster. Es gibt mehrere Namespac...
Inhaltsverzeichnis Vorwort: Ubuntu 18.04 ändert d...
Ein Freund in der Gruppe hat zuvor eine Frage ges...
In diesem Artikelbeispiel wird der spezifische Co...
1. Überlauf: versteckt Überlauf versteckt Wenn fü...
Ich möchte den Titel links und das Datum rechts a...
1 Gespeicherte Prozedur 1.1 Was ist eine gespeich...
Bei Datenbanken, die schon lange laufen, besteht ...
Ein einfaches Beispiel für die Verwendung der dre...
Auf dem heimischen Markt besteht noch immer ein g...
1. Die Verwendung mit Redis führt zu Startkonflik...
Lösung für das Problem, dass in Linux kein Entpac...
In diesem Artikel werden die detaillierten Schrit...
1. Laden Sie den MySQL-JDBC-Treiber (mysql-connec...
<Text> <div id="Wurzel"> &l...