Hier ist ein Code Beispiel:Wie übergebe ich eine Funktion mit nicht statischen Argumenten als Variable in JavaScript an eine andere Funktion?
function DoStuff()
{
var v1 = $('#htmlControl1').val();
var v2 = $('#htmlControl2').val();
myFunction1(v1, v2, (myFunction2(v1, v2, myFunction3)));
}
function myFunction1(v1, v2, completeFunc1)
{
//ajax code here, using jQuery, that calls
//'completeFunc1' in the 'complete:' block
}
function myFunction2(v1, v2, completeFunc2)
{
//ajax code here, using jQuery, that calls
//'completeFunc2' in the 'complete:' block
}
function myFunction3()
{
//performs some other tasks
}
Die Absicht ist, dass myFunction1
aufgerufen wird, wird der Ajax-Aufruf gemacht werden, und, nach Abschluss myFunction2
rufen, die wiederum das gleiche tun Aufruf myFunction3
auf seinem Fertigstellung.
Das tatsächliche Ergebnis ist, dass myFunction2
Zuerst führt myFunction3
nach Abschluss genannt wird, und gibt null
. myFunction1
wird dann mit null
als sein Argument für die vollständige Funktion aufgerufen, was zu keiner Aktion bei der Fertigstellung führt (Ich habe Null einchecken dort, so dass das kein Problem ist).
Also, wie mache ich, was ich hier beabsichtige? Wie übergebe ich myFunction2(v1, v2, myFunction3)
mit den gegebenen Variablen an myFunction1
als Argument?
Ich weiß nicht, warum jQuery das nicht hat. Sie glauben nicht wirklich an eine Funktion.bind, mit der Sie Argumente und den Kontext für einen Rückruf binden können. Sie würden nur eher Sie schaffen unendlich tiefe Verschlüsse. –
@Juan Mendes gibt es "$ .proxy()", aber es ist nicht wirklich so schön. – Pointy
Ja, Sie können nur den Kontext und nicht die Argumente festlegen. –