Comment passer une fonction en paramètre sans que la fonction s'exécute dans la fonction "parent" ou ne l'utilise eval()
? (Depuis que j'ai lu que ce n'est pas sûr.)
J'ai ceci:
addContact(entityId, refreshContactList());
Cela fonctionne, mais le problème est que se refreshContactList
déclenche lorsque la fonction est appelée, plutôt que lorsqu'elle est utilisée dans la fonction.
Je pourrais le contourner en utilisant eval()
, mais ce n'est pas la meilleure pratique, selon ce que j'ai lu. Comment passer une fonction comme paramètre en JavaScript?
javascript
function
parameters
imperium2335
la source
la source
addContact(1, function(id) { console.log(id); });
=
signe ...class myFuncs {
plutôt queclass myFuncs = {
. Vous devez également exécuter dans un environnement prenant en charge la syntaxe de classe (tous les navigateurs ne la prennent pas encore en charge). Si vous rencontrez toujours des difficultés, il pourrait être mieux adapté à une toute nouvelle question car votre problème ne concerne pas le passage de fonctions - c'est la syntaxe ES générale.Si vous voulez passer une fonction, faites-la simplement référence par son nom sans les parenthèses:
Mais parfois, vous souhaiterez peut-être passer une fonction avec des arguments inclus , mais ne pas la faire appeler jusqu'à ce que le rappel soit appelé. Pour ce faire, lorsque vous l'appelez, enveloppez-le simplement dans une fonction anonyme, comme ceci:
Si vous préférez, vous pouvez également utiliser la fonction apply et avoir un troisième paramètre qui est un tableau d'arguments, comme celui-ci:
la source
Exemple 1:
Exemple 2:
regarde ça
la source
Pour passer la fonction en paramètre, supprimez simplement les crochets!
L'idée derrière cela est qu'une fonction est assez similaire à une variable. Au lieu d'écrire
vous pourriez aussi bien écrire
Il existe des différences mineures entre les deux, mais de toute façon - les deux sont des moyens valides pour définir une fonction. Maintenant, si vous définissez une fonction et l'affectez explicitement à une variable, il semble tout à fait logique que vous puissiez la passer en paramètre à une autre fonction, et vous n'avez pas besoin de crochets:
la source
typeof paramFunc == "function"
assez, car si ce n'est pas appelable, alors vous pouvez l'ignorer.Il y a une phrase parmi les programmeurs JavaScript: "Eval is Evil" alors essayez de l'éviter à tout prix!
En plus de la réponse de Steve Fenton, vous pouvez également transmettre des fonctions directement.
la source
J'ai coupé tous mes cheveux avec ce problème. Je n'ai pas pu faire fonctionner les exemples ci-dessus, alors j'ai fini comme:
Et cela fonctionne comme un charme ... pour ce dont j'avais besoin au moins. J'espère que cela pourrait aider certains.
la source
Je suggère de mettre les paramètres dans un tableau, puis de les diviser en utilisant la
.apply()
fonction. Alors maintenant, nous pouvons facilement passer une fonction avec beaucoup de paramètres et l'exécuter de manière simple.la source
Vous pouvez également utiliser
eval()
pour faire la même chose.C'est ça. Je cherchais également cette solution et j'ai essayé des solutions fournies dans d'autres réponses, mais j'ai finalement réussi à le faire à partir de l'exemple ci-dessus.
la source
Voici une autre approche:
la source
En fait, cela semble un peu compliqué, non.
get méthode comme paramètre:
Vous pouvez donner comme méthode de paramètre:
la source
Les autres réponses décrivent très bien ce qui se passe, mais un "piège" important consiste à s'assurer que tout ce que vous traversez est bien une référence à une fonction.
Par exemple, si vous passez par une chaîne au lieu d'une fonction, vous obtiendrez une erreur:
Voir JsFiddle
la source
Parfois, lorsque vous devez traiter avec un gestionnaire d'événements, vous devez également passer l'événement comme argument, la plupart des bibliothèques modernes comme react, angular pourraient en avoir besoin.
J'ai besoin de remplacer la fonction OnSubmit (fonction de la bibliothèque tierce) avec une validation personnalisée sur reactjs et j'ai passé la fonction et l'événement tous les deux comme ci-dessous
INITIALEMENT
FAIT UNE NOUVELLE FONCTION
upload
et appelé passéonSubmit
et événement comme argumentsla source
Vous pouvez également utiliser un JSON pour stocker et envoyer des fonctions JS.
Vérifiez les points suivants:
Cela imprimera «a».
Ce qui suit a le même effet avec ce qui précède:
Ce qui a également le même effet avec ce qui suit:
Et un paradigme d'objet utilisant Class comme prototype d'objet:
la source