Heim >Web-Frontend >js-Tutorial >Synchronisation und Asynchronität in JavaScript
Synchronisation und Asynchronität sind beim Erlernen von JavaScript zwei sehr problematische Konzepte, insbesondere für Anfänger. Vereinfacht gesagt spricht man von Synchronisation, wenn zwei oder mehr Dinge gleichzeitig geschehen; wenn sie nicht gleichzeitig geschehen, spricht man von Asynchronität.
Obwohl diese beiden Konzepte einfach erscheinen, erfordert es viel Mühe, sie tatsächlich zu verstehen. Wir müssen durch tatsächliche Operationen verstehen, welche Situationen synchron und welche asynchron sind.
Sie denken vielleicht, dass gewöhnliche JavaScript-Funktionen synchron sind. Wenn Sie setTimeout() und AJAX verwenden, denken Sie vielleicht auch, dass sie synchron sind, oder? Wenn ich Ihnen sagen würde, dass diese beiden Funktionen zu bestimmten Zeiten auch asynchron sein können, würden Sie es glauben?
Um den Grund klar zu erklären, brauchen wir die Hilfe von Herrn X.
Szenario 1: Herr hat Aufgaben zugewiesen.
Wenn du Fragen stellst, hört er zu; wenn er Antworten gibt, hörst du gleichzeitig zu.
Wie kann Herr X also mit dieser Situation umgehen?
1 Herr X stellt einen Assistenten Herrn M ein und ist mit einem Anrufbeantworter ausgestattet.
Man kann sagen, dass es beides ist. Wenn Sie eine Nachricht auf dem Anrufbeantworter hinterlassen, hört Herr X nicht zu, es handelt sich also um eine asynchrone Kommunikation.
Jetzt sollten Sie synchrone und asynchrone Kommunikation verstehen. Lassen Sie uns nun über Synchronisierung und Asynchronität in JavaScript sprechen.
JavaScript – eine asynchrone Programmiersprache
Wenn jemand sagt, dass JavaScript eine asynchrone Sprache ist, meint er damit im Allgemeinen, dass Sie bei der Verwendung von JavaScript Nachrichten empfangen müssen und wann Wenn Sie anrufen, hören Sie kein Besetztzeichen.
Funktionsaufrufe in JavaScript erfolgen nie direkt, sondern über Nachrichten.
JavaScript verwendet eine Nachrichtenwarteschlange, in der neu eingehende Nachrichten (oder Ereignisse) vorübergehend gespeichert werden. Die Ereignisschleife verarbeitet diese Nachrichten kontinuierlich und sendet sie an den Aufrufstapel, wo die entsprechenden Nachrichtenfunktionen zur Ausführung in Frames gestapelt werden (die unabhängigen und abhängigen Variablen der Funktion).
Der Aufrufstapel enthält den Rahmen der ersten aufgerufenen Funktion sowie die Rahmen anderer Funktionen, die durch verschachtelte Aufrufe über dieser Funktion aufgerufen werden.
Wenn eine Nachricht zur Warteschlange hinzugefügt wird, wartet sie, bis der vorherige Nachrichtenrahmen im Aufrufstapel verarbeitet wurde. Nachdem die vorherige Nachricht verarbeitet wurde, entfernt die Ereignisschleife sie aus der Warteschlange und fügt dann den entsprechenden Frame der aktuellen Nachricht zum Aufrufstapel hinzu.
Diese Nachricht beginnt erneut zu warten und weist den Aufrufstapel an, den entsprechenden Frame zu löschen und dann aus der Warteschlange entfernt zu werden.
Sehen Sie sich den folgenden Code an:
function foo(){}function bar(){ foo(); }function baz(){ bar(); } baz();
Die hier ausgeführte Funktion ist baz() und befindet sich in der letzten Zeile des Codesegments. Sie wird der Warteschlange hinzugefügt Nachricht. Wenn die Schleife es aufnimmt, beginnt der Aufrufstapel während der Ausführung mit dem Stapeln von Frames für baz(), bar() und foo().
Nachdem die Ausführung der Funktionen abgeschlossen ist, werden deren Frames aus dem Aufrufstapel entfernt und die Nachricht wartet weiterhin in der Warteschlange, bis baz() auf dem steht Stapel wurde ausgeworfen.
Denken Sie daran, dass Funktionsaufrufe in JavaScript nie direkt, sondern über Nachrichten erfolgen.
Was sind diese spezifischen asynchronen Methoden?
Bisher bin ich auf einige APIs gestoßen, wie zum Beispiel setTimeout() und AJAX, die speziell als asynchrone Methoden bezeichnet werden. Was ist los?
Eine sehr wichtige Sache ist zu verstehen, welche Dinge synchron und welche asynchron passieren. Mithilfe von Ereignissen und Ereignisschleifen kann JavaScript Nachrichten asynchron verarbeiten. Dies bedeutet jedoch nicht, dass alles in JavaScript asynchron ist.
Ich habe bereits gesagt, dass die Nachricht die Warteschlange erst verlässt, wenn der Aufrufstapel den entsprechenden Frame löscht. Es ist zum Beispiel so, als würden Sie nicht rausgehen, um sich einen Film anzusehen, bis Sie die Antwort bekommen – was zu diesem Zeitpunkt passiert, ist synchron: Sie stehen da und warten darauf, dass die Aufgabe erledigt wird, und gehen erst, nachdem Sie gesehen haben, dass die Aufgabe mit Ihnen erledigt ist eigene Augen.
Das Obige ist der synchrone und asynchrone Inhalt von JavaScript. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!