Geben Sie die Funktion als Parameter in eine andere Funktion über. Diese Funktion wird als Rückruffunktion bezeichnet
In dieser Situation tritt oft auf, dass die A- und B -Schichten eines Projekts von verschiedenen Mitarbeitern in Zusammenarbeit abgeschlossen werden. Die A -Schicht ist für die Funktion funa verantwortlich und die B -Schicht ist für FuncB verantwortlich. Wenn die B -Schicht die Daten eines bestimmten Moduls verwenden möchte, teilte er dem A -Layer -Personal mit, dass ich Sie Daten zur Verfügung stellen muss, die bestimmten Anforderungen entsprechen, und Sie geben mir eine Schnittstelle.
Das Personal auf Stufe A sagte: Ich werde Ihnen Daten zur Verfügung stellen und wie sie angezeigt und verarbeitet werden. Bs Geschäft.
Natürlich kann Schicht B für jede Anforderung keine Datenschnittstelle bereitstellen. B bietet eine Schnittstelle zum Pass. B erhält die Daten und dann schreibt B die Funktion, um sie anzuzeigen.
Das heißt, Sie müssen mit anderen und anderen zusammenarbeiten, die Daten angeben, und Sie müssen sich nicht darauf konzentrieren, wie andere Daten erhalten oder erstellen. Sie müssen nur mit den von Ihnen erhaltenen Daten arbeiten. Sie müssen zu diesem Zeitpunkt eine Rückruffunktion verwenden
Daher sind Rückrufe im Wesentlichen ein Designmuster, und die Designprinzipien von JQuery (einschließlich anderer Frameworks) folgen diesem Muster.
Ein Beispiel für die Verwendung von Callbacks in Synchronisierung (Blockierung) ist die Ausführung von Func2, nachdem der Func1 -Code ausgeführt wurde.
Die Codekopie lautet wie folgt:
var func1 = function (callback) {
// etwas mach.
(callback && typeof (callback) === "Funktion") && callback ();
}
func1 (func2);
var func2 = function () {
}
Beispiel für asynchrone Rückrufe:
Die Codekopie lautet wie folgt:
$ (Dokument) .Ready (Rückruf);
$ .ajax ({{{
URL: "test.html",
Kontext: Dokument.body
}). Done (function () {
$ (this) .AddClass ("fertig");
}). fail (function () {
Alert ("Fehler");
}). Immer (function () {
alarm ("vollständig");
});
Beachten Sie, dass die AJAX -Anfrage tatsächlich asynchron ist, diese Anfrage jedoch vom Browser angefordert wird. Wenn der Status der Anfrage geändert wird, generiert der asynchrone Thread ein Statuswechsel -Ereignis und stellt ihn in die verarbeitende Warteschlange der JavaScript -Engine, um auf die Verarbeitung zu warten. Siehe: http://www.phpv.net/html/1700.html
Wann wird der Rückruf ausgeführt?
Rückruffunktionen werden normalerweise in einer synchronen Situation ausgeführt, werden jedoch möglicherweise nicht in einer asynchronen Situation ausgeführt, da das Ereignis nicht ausgelöst wird oder die Bedingungen nicht erfüllt sind.
Anwendungsfälle von Rückruffunktionen
Ressourcenbeladen: Führen Sie den Rückruf nach dynamischem Laden von JS -Dateien aus, führen Sie den Rückruf nach dem Laden von IFrame aus, führen Sie den Rückruf nach dem Laden von AJAX -Vorgängen aus, führen Sie den Rückruf nach dem Laden des Bildes, AJAX usw. aus, usw.
DOM-Ereignisse und Node.js-Ereignisse basieren auf dem Rückrufmechanismus (Node.js-Rückrufe haben möglicherweise mehrschichtige Rückrufprobleme).
Die Verzögerungszeit von SetTimeout beträgt 0. Dieser Hack wird häufig verwendet. Die von SetTimeOut genannte Funktion ist eigentlich eine Rückrufausführungsausführungsform
Kettenaufruf: Wenn Kettenaufruf, ist es einfach, den Kettenaufruf in der Setzermethode (Setter) (oder in Methoden, die keine Werte zurückgeben) zu implementieren, aber der Wert Getter ist relativ schwer zu implementieren, da der Wert Getter die benötigten Daten anstelle dieses Zeigers zurückgibt. Wenn Sie die Kettenmethode implementieren möchten, können Sie eine Rückruffunktion verwenden, um sie zu implementieren.
Die Funktionsaufrufe von SetTimeout und SetInterval erhalten ihren Rückgabewert. Da beide Funktionen asynchron sind, dh ihr Anrufzeitpunkt und der Hauptprozess des Programms sind relativ unabhängig, gibt es keine Möglichkeit, auf ihren Rückkehrwert im Körper zu warten, und das Programm wird nicht anhalten und warten, wenn sie geöffnet werden, andernfalls geht die Bedeutung von SetTimeout und SetInterval verloren. Daher ist es bedeutungslos, die Rückgabe zu verwenden, sodass nur Rückruf verwendet werden kann. Die Bedeutung des Rückrufs besteht darin, die Proxy -Funktion der Timer -Ausführungsergebnisse für die rechtzeitige Verarbeitung zu benachrichtigen.
Ich sollte einige Informationen online gesammelt haben und ich sollte es verstehen. Ich werde ein Beispiel alleine aussortieren:
Die Codekopie lautet wie folgt:
Funktion Fun (Num, Callback) {
if (num <0) {
ALERT ("Rufen Sie die A-Level-Funktion auf, um sie zu handhaben!");
ALERT ("Daten können nicht negativ sein, Eingabefehler!");
} else if (num == 0) {
ALERT ("Rufen Sie die A-Level-Funktion auf, um sie zu handhaben!");
ALERT ("Dieser Datenelement existiert nicht!");
}anders{
ALERT ("Aufrufen von B-Level-Funktion, um zu verarbeiten!");
Rückruf (1);
}
}
Funktionstest () {
var num = document.getElementById ("Score"). Wert;
Fun (num, Funktion (zurück) {// Anonyme B-Layer-Verarbeitungsfunktion
alert (":"+zurück);
if (num <2)
alarm ("Nummer ist 1");
sonst wenn (num <= 3)
Alarm ("Die Zahl ist 2 oder 3!");
anders
Alarm ("Zahl größer als 3!");
})
}
Wenn die Funktion beginnt, Spaß auszuführen, gehen Sie zunächst fest, ob Num eine negative oder null ist, andernfalls führen Sie die B-Layer-Verarbeitungsfunktion auf (":"+zurück). Ausgabe 1 und bestimmen Sie es als <2, <= 3,> 3, usw.
Tipps erleben:
Es ist am besten sicherzustellen, dass der Rückruf existiert und ein Funktionsreferenz- oder Funktionsausdruck sein muss:
Die Codekopie lautet wie folgt:
(callback && typeof (callback) === "Funktion") && callback ();
Die Codekopie lautet wie folgt:
var obj = {
Init: Funktion (Rückruf) {
// todo ...
if (callback && typeof (callback) === "Funktion") && callback ()) {
Callback ('init ...'); // Rückruf
}
}
Schließlich, warum Sie eine Rückruffunktion verwenden müssen? Die folgende Metapher ist sehr lebhaft und interessant.
Wenn Sie etwas zu tun haben, gehen Sie zum nächsten Schlafsaal, um einen Klassenkameraden zu finden und festzustellen, dass die Person nicht da ist, was sollten Sie tun?
Methode 1: Gehen Sie alle paar Minuten zum nächsten Schlafsaal, um festzustellen, ob die Person da ist
Methode 2: Bitte rufen Sie jemanden im selben Schlafsaal mit und rufen Sie Sie an, wenn Sie ihn zurückkommen sehen
Ersteres ist befragt, und letzteres ist Rückruf.
Dann sagst du, kann ich direkt im Schlafsaal nebenan warten, bis meine Klassenkameraden zurückkommen?
Ja, aber auf diese Weise hätten Sie Zeit sparen können, um andere Dinge zu tun, aber jetzt müssen Sie es beim Warten verschwenden. Verwandeln Sie den originalen nicht blockierenden asynchronen Aufruf in einen blockierenden synchronen Anruf.
JavaScript -Rückrufe werden in asynchronen Anrufszenarien verwendet, und die Leistung der Verwendung von Rückrufen ist besser als die Wahl.