javascript: passer de la fonction en tant que paramètre à une autre fonction, le code est appelé dans un autre ordre, puis-je m'attendre
je veux passer d'une fonction à une autre fonction en tant que paramètre.
Je veux le faire parce que la fonction de celui-ci appelle un async méthode Jquery et APRÈS qui donne un résultat en retour, je veux un peu de code javascript exécuté.
Et parce que cette fonction est appelée à partir de plusieurs endroits, je veux le code à exécuter (après l'async Jquery code est exécuté) à être passés à la fonction.
Du sens? j'espère 🙂
Maintenant ce qui est à voir, c'est que l'ordre dans lequel le code est exécuté est noth ce que je veux.
J'ai simplifié le code pour ce code:
$('#AddThirdParty').click(function() {
var func = new function() {
alert('1');
alert('2');
alert('3');
}
alert('4');
LoadHtml(func);
alert('5');
});
function LoadHtml(funcToExecute) {
//load some async content
funcToExecute;
}
Maintenant ce que je voulais obtenir (ou au moins ce que je pensais qui allait arriver) que alert4 aurait le feu, puis la loadhtml aurait le feu alert1, alert2 et alert3, puis le code de retour de alert5.
Mais voilà ce qui se passe: alert1, alert2, alert3, alert4, alert5.
Personne ne sait ce que je fais mal et c'est pourquoi l'ordre dans lequel le code est exécuté?
Il ressemble à la alert1..alert3 est exécuté lorsque je définir le new function()
, mais pourquoi ne pas ÉGALEMENT exécuté que lorsque j'appelle ça de la LoadHtml
fonction?
Vous devez vous connecter pour publier un commentaire.
Deux erreurs: la syntaxe pour les fonctions anonymes ne pas inclure le mot-clé
new
; et JavaScript nécessite des parenthèses pour les appels de fonction, même si les fonctions ne prennent pas tous les arguments. Quand vous venez de direfuncToExecute
, c'est juste une variable donnant sa valeur dans un contexte où rien n'est à l'aide de cette valeur (un peu comme l'écriture3;
comme un énoncé).Vous remarquerez peut-être que vous savez déjà comment utiliser les fonctions anonymes: vous n'avez pas à écrire
$('#AddThirdParty').click(new function() ...);
funcToExecute
avec ces paramètres.func
devientfuncToExecute
à l'intérieur deLoadHtml
, de sorte qu'ils acceptent les mêmes paramètres.LoadHtml
devraient être conscients des paramètres qui passent à travers? Pour mettre cela en perspective, je suis en train d'écrire une simple jQuery méthode d'extension qui n'est une méthode de bascule. Je vais avoir des problèmes en faisant quelque chose comme$("#id").fnToggle('click', fnOn($(this)), fnOff($(this)));
. Ma méthode s'exécute quelque chose qui active ou désactive lesdata-toggle
attribut d'élément, puis tente de l'appeler fnOn et fnOff sans avoir à être conscients de ce que les paramètres sont passés dans celui-ci.La
new
mot clé crée un objet à partir de la fonction. Cela signifie que la fonction (qui est anonyme) est appelée immédiatement. Ce serait le même queCela signifie que la création d'un nouvel objet (pas une fonction!) et à l'intérieur du constructeur de votre alerte 1,2,3. Ensuite, vous alerte 4. Vous pouvez ensuite appeler LoadHtml qui ne fait rien, alors vous alerte 5.
Comme pour
funcToExecute;
La funcToExecute est juste une variable contenant une fonction. Il doit être exécuté.