Was ist die Rückruffunktion? Ich weiß wirklich nicht, wie man die JS -Rückruffunktion benutzt und funktioniert, bevor ich sie lernen soll. Im folgenden Artikel werde ich Ihnen die Schüler das Beispiel meiner Lern -Callback -Funktion vorstellen. Schüler, die wissen müssen, sollten nicht darauf achten, die Referenz nicht einzugeben.
Rückruffunktionsprinzip:
Ich werde jetzt gehen und dich benachrichtigen. "
Dies ist ein asynchroner Prozess. Während des Prozesses von "Ich gehe zu" (Funktionsausführung) "können Sie" alles tun ", kommt" an "(Funktionsausführung ist abgeschlossen) und" benachrichtigen Sie "(Rückruf), nachdem der Prozess der" Benachrichtigung "(Rückruf) durchgeführt wurde
Beispiel
1. Grundmethoden
<script Language = "javaScript" type = "text/javaScript"> Funktion doomething (callback) {//… // rufe den CallbackCallback ('Stuff', 'Goes', 'Here');} Funktion foo (a, b, c) {// Ich bin der Callbackalert (a + " +" " +" + " +" + " +" + "; </script>Oder anonyme Funktion verwenden
<script Language = "javaScript" type = "text/javaScript"> Funktion doomething (DamStg, Callback) {alert (DamSG); if (typeof callback == "function") callback (); } dosomething ("Callback -Funktion", function () {alert ("gleich wie JQuery Callbacks Formular!");}); </script>2. Fortgeschrittene Methoden
Rufen Sie die Methode mit JavaScript auf
<script Language = "javaScript" type = "text/javaScript"> Funktionssache (Name) {this.name = name;} Thing.Prototype.dosomething = function (Callback) {// Aufruf unseres Rückrufs, aber unsere eigene Instanz als die contextcallback.call (this);} Funktion foo () {) {) {) (this.name) (this.name); Ding ('Joe'); // alarmiert "Joe" über `foo` </script>Parameter übergeben
<script Language = "javaScript" type = "text/javaScript"> Funktionssache (Name) {this.name = name;} Thing.Prototype.dosomething = Funktion (Rückruf, Gruß) {// nennen Sie unseren Rückruf, aber verwenden Sie unser eigenes Instanz als Kontextcallback.call (this salutation). t = new Ding ('Joe'); // alarmiert "hi joe" über `foo` </script>Übergeben Sie Parameter mit JavaScript
<script Language = "javaScript" type = "text/javaScript"> Funktionssache (Name) {this.name = name;} Sache.Prototype.dosomething = function (callback) {// Nennen Sie unseren Rückruf, aber verwenden Sie unsere eigene Instanz als Kontext. "" + this.name + "" + drei + "" + zwei + "" + eins);} var t = new Ding ('joe'); t.dosomething (foo); // alarmiert "hi joe 3 2 1" über `foo` </script>Beispiel
// Wenn die bereitgestellte Datenquelle eine Ganzzahl ist, die die Punktzahl eines Schülers ist, wird sie von der zugrunde liegenden Ebene verarbeitet und wenn n> 0 von der oberen Schicht verarbeitet wird.
// Kopieren Sie die folgende Funktion und speichern Sie sie auf 1.Js
Funktion f (num, radback) {if (num <0) {alert ("die Funktion mit niedriger Ebene aufrufen, um zu verarbeiten!"); ALERT ("Score kann nicht negativ sein, Eingabefehler!"); } else if (num == 0) {alert ("Rufen Sie die Funktion mit niedriger Ebene auf, um zu verarbeiten!"); Alarm ("Der Schüler hat die Prüfung möglicherweise nicht abgelegt!"); } else {alert ("Rufen Sie die hochrangige Funktion auf, um zu verarbeiten!"); callback (); }}// Speichern Sie die folgende test.html -Datei in demselben Verzeichnis wie 1.JS:
<! DocType html public "-// w3c // dtd html 4.01 transitional // en charSet = gb2312 "> <script src =" 1.js "type =" text/javaScript "> </script> <title> bis betitelte Dokument </title> <script type =" text/javaScript "> Funktionstest () {var p = document.getElementById (" pp "); pp.Innertext = ""; var num = document.getElementById ("Score"). Wert; f (num, function () {// Anonyme Verarbeitungsfunktion High-Level-Verarbeitungsfunktion if (num <60) alert ("fehlgeschlagen!"); else if (num <= 90) alert ("Ausgezeichnetes Ergebnis!"); sonst alert ("Ausgezeichnetes Ergebnis!");}) pp.inNtext = "By1978 qq58064!" " } </script> </head> <body> <p> Callback -Funktion Beispiel: Wenn die Schülerbewertung <= 0 Punkte, wird die untere Ebene damit umgegangen. Wenn die Punktzahl> 0 ist, wird die obere Ebene damit umgegangen. </p> Bitte geben Sie Student Scores ein <Eingabe type = "text" id = "Score"> <Eingabe type = "button" onclick = "test ()" value = "Überprüfen Sie die Ergebnisse"> <p id = "pp"> </p> </body> </html>Im Folgenden finden Sie die Ergänzungen anderer Internetnutzer:
Rückrufmodus in JavaScript:
Wie gezeigt in:
Funktion WriteCode (Callback) {// Führen Sie einige Dinge aus, callback (); // ...} function Intducebugs () {//....Intertroducucucucucucucucucucucucuce} WriteCode (Intrducebugs);Wir übergeben die Anwendung der Funktion an WriteCode (), damit WriteCode sie zum richtigen Zeitpunkt ausführt (zurück, um es später aufzurufen).
Schauen wir uns zunächst ein nicht so gutes Beispiel an (es wird später neu gestaltet):
// Simulieren Sie die DOM -Knoten auf der Suchseite und geben Sie die gefundenen Knoten im Array einheitlich zurück // Diese Funktion wird nur verwendet, um keine logische Verarbeitung für die Dom -Knoten zu ermitteln var fandnodes = function () {var i = 100000; // eine große Anzahl von Schleifen, var Knoten = []; // Verwenden Sie die gefundenen Dom -Nodes var gefunden; while (i) {i -= 1; Knoten.push (gefunden); } Returnknoten; } // Alle Dom -Knoten verstecken var hide = Funktion (Knoten) {var i = 0, max = nodes.length; für (; i <max; i ++) {// Es gibt Klammern, nachdem er die Ausführung sofort angezeigt hat. Führen Sie zuerst FindNodes () aus und führen Sie dann Hide () <hide (findNodes ()) aus; Funktion ausführen}; Knoten [i] .Style.display = "Keine"} Die obige Methode ist ineffizient. Es wird angenommen, dass Hide () die von FindNodes () zurückgegebenen Array -Knoten erneut durchqueren muss. Wie man solche unnötigen Schleifen vermeidet. Wir können den Abfrageknoten nicht direkt in FindNodes ausblenden (diese Suche kann die logische Kopplung ändern), sodass es keine allgemeine Funktion mehr ist. Die Lösung besteht darin, den Callback -Modus zu verwenden, in dem Sie die versteckte Logik des Knotens übergeben können, um in einer Rückruffunktion () in einer Rückruffunktion zu delegieren // Refactor FindNodes, um eine Rückruffunktion zu akzeptieren. // Überprüfen Sie, ob die Rückruffunktion für Callback verfügbar ist, wenn (Typof Callback! == 'Funktion') {callback = false; } while (i) {i -= 1; if (callback) {callback (gefunden); } nodes.push (gefunden); } Returnknoten; } // Checkback -Funktion var hide = function (node) {node.style.display = 'none'; } // Finden Sie den nachfolgenden Knoten und verbergen Sie ihn in nachfolgenden Ausführungen Findnodes (ausblenden); // Finden Sie Findnodes und dann aus. Natürlich kann die Rückruffunktion auch beim Aufrufen der Hauptfunktion erstellt werden: findnodes (Funktion (Knoten) {node.style.display = 'none';});