Ich verstehe es, eine Funktion als Rückruf an eine andere Funktion zu übergeben und ausführen zu lassen, aber ich verstehe nicht die beste Implementierung, um dies zu tun. Ich suche ein sehr einfaches Beispiel wie dieses:
var myCallBackExample = {
myFirstFunction : function( param1, param2, callback ) {
// Do something with param1 and param2.
if ( arguments.length == 3 ) {
// Execute callback function.
// What is the "best" way to do this?
}
},
mySecondFunction : function() {
myFirstFunction( false, true, function() {
// When this anonymous function is called, execute it.
});
}
};
Wenn ich in myFirstFunction einen neuen Rückruf () zurückgebe, funktioniert dies und führt die anonyme Funktion aus, aber das scheint mir nicht der richtige Ansatz zu sein.
arguments
es sich nicht um ein Array handelt, können Sie seine Länge dennoch wie folgt angeben: Probieren Sie es ausarguments.length
. Diese Eigenschaft bezieht sich auf die Anzahl der tatsächlich übergebenen Argumente und nicht unbedingt auf die Anzahl der Parameter in der Funktionssignatur.Antworten:
Das kann man einfach sagen
Alternativ können Sie die
call
Methode verwenden, wenn Sie den Wertthis
innerhalb des Rückrufs anpassen möchten .Innerhalb der Funktion
this
wäre was auch immernewValueForThis
.quelle
Sie sollten überprüfen, ob der Rückruf vorhanden ist und eine ausführbare Funktion ist:
Viele Bibliotheken (jQuery, Dojo, etc.) ein ähnliches Muster für ihre asynchronen Funktionen sowie node.js für alle Asynchron - Funktionen (NodeJS in der Regel passiert
error
unddata
an die Callback). Ein Blick in den Quellcode würde helfen!quelle
callback
einen String und überprüfst dann seinen Typ? Wird dies die Leistung verbessern? Dies ist wie das Überprüfen des Typs, das Überprüfen, ob der konvertierte Boolesche Wert true zurückgibt, und das erneute Überprüfen seines Typs und das Testen anhand der Zeichenfolge ... Können Sie erklären, warum?typeof(callback)
für Sie erreichen?typeof(null) === "Object"
,typeof("undefined") === "undefined"
callback
wird nicht in eine Zeichenfolge umgewandelt, sondern der Typ wird vor dem Aufruf überprüft, ob es sich um eine Funktion handelt. Der Code akzeptiert vermutlichcallback
als Argument und ist sich nicht sicher, ob das Argument von einem aufrufbaren Typ ist - oder vielleicht sind die Argumente von verschiedenen Typen, um eine Form des Polymorphismus bereitzustellen, bei der Code möglicherweise unterschiedlich auf verschiedenetypeof
Argumente reagiert .Es gibt 3 Hauptmöglichkeiten, um eine Funktion auszuführen:
Die von Ihnen gewählte Methode hängt davon ab, ob:
Dokumente für Function.call , Function.apply
quelle
Bei Rückrufen geht es um Signale und bei "Neu" geht es um das Erstellen von Objektinstanzen.
In diesem Fall wäre es noch angemessener, nur "callback ()" auszuführen. als "return new callback ()", weil Sie sowieso nichts mit einem Rückgabewert machen.
(Und der Argumentargument.length == 3-Test ist wirklich klobig, fwiw, besser zu überprüfen, ob der Rückrufparameter existiert und eine Funktion ist.)
quelle
Die richtige Implementierung wäre:
Dies macht den Rückrufparameter optional.
quelle
Sie können verwenden:
Das folgende Beispiel ist etwas umfassender:
quelle
Hier ist ein grundlegendes Beispiel, das die
callback()
Funktion in JavaScript erklärt:JSFiddle
quelle
quelle