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
In diesem Artikel wird der spezifische Code für d...
Zabbix 12.10.2019 Chenxin siehe https://www.zabbi...
Inhaltsverzeichnis Verschachtelung Kommunikation ...
Nach dem Upgrade von MySQL auf Version 5.7 wurde ...
In diesem Artikel wird der spezifische Code der V...
Inhaltsverzeichnis Wir haben in einem früheren Ar...
Dies ist der Effekt der Element-UI-Ladekomponente...
ins und del wurden in HTML 4.0 eingeführt, um Auto...
Als ich zum ersten Mal mit Docker in Berührung ka...
Früher war es ziemlich mühsam, abgerundete Ecken ...
Früher dachte ich, dass Skripte überall in HTML p...
1. Laden Sie MySQL Community Server 5.6.35 herunt...
Dieser Artikel enthält ein ausführliches Tutorial...
In diesem Artikel wird der spezifische Code für j...
Bevor wir beginnen, erstellen wir zwei Tabellen, ...