Wie übergebe ich eine Funktion als Parameter, ohne dass die Funktion in der "übergeordneten" Funktion ausgeführt wird oder verwendet wird eval()
? (Da ich gelesen habe, dass es unsicher ist.)
Ich habe das:
addContact(entityId, refreshContactList());
Es funktioniert, aber das Problem ist, dass es refreshContactList
ausgelöst wird, wenn die Funktion aufgerufen wird, anstatt wenn sie in der Funktion verwendet wird.
Ich könnte es mit umgehen eval()
, aber es ist nicht die beste Vorgehensweise, so wie ich es gelesen habe. Wie kann ich eine Funktion als Parameter in JavaScript übergeben?
javascript
function
parameters
imperium2335
quelle
quelle
addContact(1, function(id) { console.log(id); });
=
Vorzeichen ...class myFuncs {
stattclass myFuncs = {
. Sie müssen auch in einer Umgebung ausgeführt werden, die die Klassensyntax unterstützt (noch nicht von allen Browsern unterstützt). Wenn Sie immer noch Probleme haben, ist es möglicherweise besser für eine ganz neue Frage geeignet, da es bei Ihrem Problem nicht darum geht, Funktionen zu übergeben, sondern um die allgemeine ES-Syntax.Wenn Sie eine Funktion übergeben möchten, referenzieren Sie sie einfach mit Namen ohne Klammern:
Manchmal möchten Sie jedoch möglicherweise eine Funktion mit enthaltenen Argumenten übergeben , diese jedoch erst aufrufen, wenn der Rückruf aufgerufen wird. Um dies zu tun, verpacken Sie es beim Aufrufen einfach in eine anonyme Funktion wie folgt:
Wenn Sie möchten, können Sie auch die Apply- Funktion verwenden und einen dritten Parameter haben, der ein Array der Argumente ist, wie z.
quelle
Beispiel 1:
Beispiel 2:
Schau dir das an
quelle
Um die Funktion als Parameter zu übergeben, entfernen Sie einfach die Klammern!
Die Idee dahinter ist, dass eine Funktion einer Variablen ziemlich ähnlich ist. Anstatt zu schreiben
du könntest genauso gut schreiben
Es gibt jedoch geringfügige Unterschiede zwischen den beiden - beide sind gültige Methoden zum Definieren einer Funktion. Wenn Sie nun eine Funktion definieren und sie explizit einer Variablen zuweisen, erscheint es ziemlich logisch, dass Sie sie als Parameter an eine andere Funktion übergeben können und keine Klammern benötigen:
quelle
typeof paramFunc == "function"
ist genug, denn wenn es nicht aufrufbar ist, können Sie es ignorieren.Unter JavaScript-Programmierern gibt es einen Satz: "Eval is Evil". Versuchen Sie also, ihn um jeden Preis zu vermeiden!
Neben der Antwort von Steve Fenton können Sie Funktionen auch direkt übergeben.
quelle
Ich habe mir mit diesem Problem alle Haare abgeschnitten. Ich konnte die obigen Beispiele nicht zum Laufen bringen, also endete ich wie folgt:
Und das funktioniert wie ein Zauber ... für das, was ich zumindest brauchte. Hoffe es könnte einigen helfen.
quelle
Ich schlage vor, die Parameter in ein Array einzufügen und sie dann mithilfe der
.apply()
Funktion aufzuteilen . Jetzt können wir eine Funktion mit vielen Parametern einfach übergeben und auf einfache Weise ausführen.quelle
Sie können auch
eval()
das Gleiche tun.Das ist es. Ich suchte auch nach dieser Lösung und probierte Lösungen aus, die in anderen Antworten bereitgestellt wurden, bekam sie aber schließlich anhand des obigen Beispiels zum Laufen.
quelle
Hier ist ein anderer Ansatz:
quelle
In der Tat scheint ein bisschen kompliziert, ist nicht.
Methode als Parameter abrufen:
Sie können als Parametermethode angeben:
quelle
Die anderen Antworten beschreiben hervorragend, was vor sich geht, aber ein wichtiges "Gotcha" besteht darin, sicherzustellen, dass alles, was Sie durchlaufen, tatsächlich ein Verweis auf eine Funktion ist.
Wenn Sie beispielsweise eine Zeichenfolge anstelle einer Funktion durchlaufen, wird folgende Fehlermeldung angezeigt:
Siehe JsFiddle
quelle
Manchmal, wenn Sie sich mit der Ereignisbehandlungsroutine befassen müssen, also auch das Ereignis als Argument übergeben müssen, benötigen die meisten modernen Bibliotheken wie "Reagieren" und "Winkel" dies möglicherweise.
Ich muss die OnSubmit-Funktion (Funktion aus der Bibliothek eines Drittanbieters) mit einer benutzerdefinierten Validierung für reactjs überschreiben und habe die Funktion und das Ereignis wie unten angegeben übergeben
URSPRÜNGLICH
MADE A NEW FUNCTION
upload
und aufgerufen übergebenonSubmit
und Ereignis als Argumentequelle
Sie können auch einen JSON verwenden, um JS-Funktionen zu speichern und zu senden.
Überprüfe das Folgende:
Dies wird 'a' drucken.
Folgendes hat den gleichen Effekt wie oben:
Welches ist auch der gleiche Effekt mit dem folgenden:
Und ein Objektparadigma mit Class als Objektprototyp:
quelle