JavaScript von Java aus gesehen

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.

Wo verwirrt

  1. Typinferenz
  2. Wie schreibe ich eine Funktion?
  3. Bearbeitungsauftrag
  4. Rückruf

1. Typinferenz

Sie können jede Variable mit "var" deklarieren. Variablen können sowohl ** Funktionen ** als auch Werte enthalten.

2. Wie schreibe ich eine Funktion?

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.

Anonyme Funktion

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);

Sofortige Funktion

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);

3. Bearbeitungsauftrag

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.

JavaScript ist ein einzelner Thread

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?

Die Ausführungseinheit von JavaScript ist eine Funktion

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?

4. Rückruf

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.

Rückruffunktion

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.

Versprechen Funktion

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.

Zusammenfassung

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

JavaScript von Java aus gesehen
Der Weg von JavaScript nach Java
Rufen Sie Java-Methoden aus JavaScript auf, das in Java ausgeführt wird
Java und JavaScript
Rufen Sie Java von JRuby aus auf
Änderungen von Java 8 zu Java 11
Summe von Java_1 bis 100
Eval Java-Quelle von Java
Greifen Sie über Java auf API.AI zu
Von Java zu Ruby !!
Migration von Cobol nach JAVA
Versuchen Sie, JavaScript in Java aufzurufen
Java ab Anfänger überschreiben
Elastic Search Indexerstellung aus Java
Neue Funktionen von Java7 bis Java8
Stellen Sie eine Verbindung von Java zu PostgreSQL her
Java, Instanz für Anfänger
Java-Leben von vorne anfangen
Verwenden von Docker von Java Gradle
Von ineffektivem Java zu effektivem Java
Führen Sie Nicht-Java-Anweisungen von Java aus
Rufen Sie Kotlins versiegelte Klasse von Java aus an
Java, abstrakte Klasse für Anfänger
Code Java von Emacs mit Eclim
Deep Learning Java von Grund auf 6.4 Regularisierung
Java, JavaScript, C # (Unterschied in der Zuordnung)
Delegieren Sie Java-Verarbeitung an JavaScript
Führen Sie node.js von Android Java aus (Verarbeitung)
Vermeiden Sie Java Calendar so weit wie möglich
[Java] Entfernen Sie Leerzeichen in Zeichenfolgen
Akka praktische Vorbereitungsprozedur aus Java
Greifen Sie über eine Java-Anwendung auf Teradata zu
Anmerkung 1: Grundlegende Stolpersteine (Java, Javascript)
Verwenden Sie Chrome Headless von Selenium / Java
Von Java zu VB.NET-Writing Kontrastmemo-
Java, Überlastungskonstruktor ab Anfänger
Arbeiten Sie mit Google-Tabellen aus Java
Java, Schnittstelle für Anfänger
Informationen zur Eclipse-Umgebung (Java, Liberty, JavaScript)
Wiedereinführung von Java8, das seit Android Studio 2.4 verfügbar ist
Rufen Sie die Java-API von TensorFlow von Scala aus auf
[Java] Konvertierung von Array zu Liste
Beispielcode mit Minio aus Java
JSON in Java und Jackson Teil ③ Betten Sie JSON in HTML ein und verwenden Sie es aus JavaScript