Als SE, die nur Java berührt hat, zum ersten Mal JavaScript berührte Ich konnte es nicht wie erwartet implementieren und machte mir eine Notiz.
Sie können jede Variable mit "var" deklarieren. Variablen können sowohl ** Funktionen ** als auch Werte enthalten.
Wenn Sie eine Methode in Java schreiben, schreiben Sie sie außerhalb der Klasse oder Methode und rufen Sie sie auf. In JavaScript gibt es andere Schreibweisen.
Definieren Sie eine Funktion und fügen Sie sie in eine Variable ein. Es gibt keinen Funktionsnamen, und wenn Sie ihn aufrufen, rufen Sie ihn als Variablennamen auf.
sample01.js
//Funktionsdefinition & Variablendeklaration
var hoge = function(counts) {
//wird bearbeitet
};
//Funktionsaufruf
hoge(i);
Die Methodenversion der inneren Klasse, wenn sie in Java ausgedrückt wird. Definiert und aufgerufen wie es ist.
sample02.js
//Funktionsdefinition & Funktionsaufruf
(
function(counts) {
//wird bearbeitet
}
)(i);
Java führt Verarbeitungs- und Methodenaufrufe in der Reihenfolge von oben aus. Selbst wenn eine Funktion in JavaScript aufgerufen wird, kann sie nach Abschluss einer anderen Verarbeitung ausgeführt werden und verhält sich nicht wie Java.
Ich habe in verschiedenen Artikeln gesehen, dass JavaScript asynchron ist Wie bei der asynchronen Verarbeitung von Java wurde ich ernsthaft verbrannt, als ich dachte, "Multithread-Parallelverarbeitung!"
(Referenz) Haben Sie die asynchrone Verarbeitung von JavaScript mit der parallelen Verarbeitung verwechselt?
Ich dachte: "Wenn es Multithreading ist, kann es nicht geholfen werden, wenn die aufgerufene Funktion zu einem unbeabsichtigten Zeitpunkt ausgeführt wird." Ich war noch verwirrter, als mir klar wurde, dass es überhaupt nicht Multithreading war. Angesichts der Tatsache, dass JavaScript Single-Threaded ist, Es ist schließlich seltsam, dass die Verarbeitung innerhalb der Funktion nicht ausgeführt wird, sobald die Funktion aufgerufen wird. Warum? Wenn Sie denken, dass Sie die Funktion aufrufen Es scheint, dass die Verarbeitung in der Funktion nicht ausgeführt wird, sondern in der Ausführungswarteschlange registriert ist.
sample03.js
//Anruferfunktion
function A() {
console.log('aaa');
B();
console.log('ccc');
};
//Aufzurufende Funktion
function B() {
console.log('bbb');
};
Wenn es eine Funktion wie die oben genannte gibt und Funktion A aufgerufen wird, ist die Verarbeitungsreihenfolge in Java wie folgt. Es führt die Verarbeitung in der beschriebenen Reihenfolge aus und ruft die Funktion auf. A.1 Funktion Ein Ausführungsstart A.2 "aaa" Ausgabe A.3 Aufruffunktion B. B.1 Funktion B startet die Ausführung B.2 "bbb" -Ausgang B.3 Funktion B Ende der Ausführung A.4 "ccc" -Ausgang A.5 Funktion Ein Ausführungsende
Im Fall von JavaScript ist die Verarbeitungsreihenfolge jedoch wie folgt. A.1 Funktion Ein Ausführungsstart A.2 "aaa" Ausgabe ** A.3 Funktion B in Ausführungswarteschlange registrieren ** A.4 "ccc" -Ausgang A.5 Funktion Ein Ausführungsende B.1 Funktion B startet die Ausführung B.2 "bbb" -Ausgang B.3 Funktion B Ende der Ausführung
In JavaScript wird die Verarbeitung von Funktion B während der Verarbeitung von Funktion A nicht ausgeführt. Es funktioniert nicht so, wie ich es erwartet hatte, es wie Java zu schreiben. Es ist notwendig, die Quelle unter Berücksichtigung der Ausführungswarteschlange zu beschreiben. Wenn Sie diesen Unterschied kennen, funktioniert er wie gewünscht, aber dieses Mal weiß ich nicht, wie ich mit dem Rückgabewert umgehen soll. Wie kann ich den Rückgabewert der Methode erhalten und die Verarbeitung fortsetzen?
JavaScript, das die Verarbeitung funktionsweise ausführt Was ist beispielsweise, wenn Sie die Verarbeitung mit dem Rückgabewert der aufgerufenen Funktion fortsetzen möchten? Ich hatte plötzlich die Möglichkeit, das Aufrufen von Funktionen zu beenden und die gesamte Verarbeitung in eine Funktion zu schreiben. In diesem Fall können Sie wie in der Verarbeitungsreihenfolge beschrieben vorgehen, ohne die Ausführungswarteschlange zu kennen! Ich konnte es nicht lesen. An diesem Punkt erreichen wir endlich die Bedeutung des Rückrufs.
Ich sehe es viel, aber ich habe die Bedeutung seiner Existenz nicht verstanden. Ich habe verstanden, dass JavaScript ein einzelner Thread ist und die Verarbeitungseinheit eine Funktion, und ich habe die Bedeutung der Existenz gefunden. Mit der Rückruffunktion kann die Verarbeitung nach dem Aufruf der Funktion beschrieben werden. Ich hatte das Gefühl, dass die Ausführung der Funktion, die in das Argument in der Funktion eingefügt wurde, sich stark von Java unterscheidet. Wenn Sie die gesamte Verarbeitung beschreiben, die Sie nach dem Aufrufen der Funktion in der Rückruffunktion ausführen möchten, Die Verarbeitung wird in der beschriebenen Reihenfolge ausgeführt! Endlich haben wir das Stadium erreicht, in dem wir es nach Belieben mit JavaScript implementieren können.
sample04.js
//Definieren Sie die Funktion A (registrieren Sie die Argumentfunktion in der Ausführungswarteschlange, nachdem Sie "aaa" ausgegeben haben)
var A = function(callback) {
console.log('aaa');
callback()
};
//Funktion B definieren
var B = function(callback) {
console.log('bbb');
callback()
};
//Funktion C definieren
var C = function() {
console.log('ccc');
};
//Anruferfunktion
function call() {
A(
B(
C()
)
)
};
Die Verarbeitungsreihenfolge ist wie folgt und die Reihenfolge ist dieselbe wie bei Java. Ich hätte nicht versuchen sollen, etwas zu tun, nachdem ich Funktion B in der Ausführungswarteschlange in Funktion A registriert habe. Die gesamte Verarbeitung nach dem Funktionsaufruf wird in der aufgerufenen Funktion oder in der Rückruffunktion der aufgerufenen Funktion beschrieben. A.1 Funktion Ein Ausführungsstart ** A.2 "aaa" Ausgabe ** A.3 Registrieren Sie die Funktion B in der Ausführungswarteschlange A.4 Funktion Ein Ausführungsende B.1 Funktion B startet die Ausführung ** B.2 "bbb" Ausgabe ** B.3 Registrieren Sie die Funktion C in der Ausführungswarteschlange B.4 Funktion B Ende der Ausführung C.1 Funktion C startet die Ausführung ** C.2 "ccc" Ausgabe ** C.3 Funktion C Ende der Ausführung
Die Rückruffunktion kann auch verwendet werden, um die folgende Verarbeitung unter Verwendung des Rückgabewerts der Funktion durchzuführen. Die Fähigkeit, eine Funktion als Argument zu übergeben, unterscheidet sich stark von Java.
Dann trifft er die Rückrufhölle.
Callback Hell ist jetzt eine alte Geschichte und kann mit der Promise-Funktion vermieden werden. Mit Promise.then () ist die Hölle los, und Sie können den Prozess abhängig vom Ergebnis der aufgerufenen Funktion einfach steuern. Insbesondere registriert Promise.all () die Funktion in der Ausführungswarteschlange, nachdem die Verarbeitung der übergebenen Promise-Funktion abgeschlossen ist. Sie können die Verarbeitungsreihenfolge auch steuern, indem Sie eine Funktion in einer Schleife aufrufen.
(Referenz) Versuchen Sie, JavaScript-Synchronisation, Asynchronität, Rückruf und Versprechen zu organisieren.
Obwohl Typinferenz und das Schreiben von Funktionen nicht in Java verfügbar sind, waren sie relativ einfach zu verstehen. Die Verarbeitungsreihenfolge scheint selbst unter dem Gesichtspunkt von JavaScript oder allgemeinen Programmiersprachen natürlich zu sein. Es gab wenig Informationen zu erklären. Es scheint eine Selbstverständlichkeit zu sein ………… Als Person, die nur Java kennt, war es ein Kulturschock.
Recommended Posts