Passer une fonction en argument dans une fonction javascript

Je me demandais si cela était légal. Pourrais-je avoir quelque chose comme:

function funct(a, foo(x)) { ... } 

a est un tableau et x est un argument entier pour une autre fonction appelée foo ?

(L'idée est d'avoir une fonction qui utilise une boucle for sur le tableau et appelle cette fonction dans les params pour chaque élément du tableau. L'idée est donc appeler cela sur différentes fonctions afin que les éléments de deux tableaux soient multipliés et que les Les sommes sont ajoutées. Par exemple A[0] * B[0] + A[1] * B[1] .)

Je pense que c'est ce que vous vouliez dire.

 funct("z", function (x) { return x; }); function funct(a, foo){ foo(a) // this will return a } 

Ce n'est pas la façon de déclarer une fonction avec une autre fonction comme l'un de ses paramètres. C'est:

 function foodemo(value){ return 'hello '+ value; } function funct(a, foo) { alert(foo(a)); } //call funct funct('world!', foodemo); //=> 'hello world!' 

Donc, le second paramètre de funct est une reference à une autre fonction (dans ce cas, foodemo ). Une fois que la fonction est appelée, elle exécute cette autre fonction (en ce cas, en utilisant le premier paramètre comme entrée pour elle).

Les paramètres d'une déclaration de fonction ne sont que des étiquettes . C'est le corps de la fonction qui leur donne un sens. Dans cet exemple, funct échouera si le second paramètre n'a pas été fourni. Donc, vérifier que cela pourrait ressembler à:

 function funct(a, foo) { if (a && foo && typeof a === 'string' && typeof foo === 'function'){ alert(foo(a)); } else { return false; } } 

En raison de la nature de JS, vous pouvez utiliser un appel de fonction direct comme paramètre dans un appel de fonction (avec la bonne définition de fonction):

 function funct2(foo){ alert(foo); } funct2(foodemo('world!')); //=> 'hello world!' 

Si vous souhaitez passer une fonction, il suffit de la référencer par nom sans les parenthèses:

 function funct(a, foo) { ... } 

Mais parfois, vous voudrez peut-être passer une fonction avec des arguments inclus , mais pas l'appeler jusqu'à ce que le rappel soit invoqué. Pour ce faire, lorsque vous l'appelez, il suffit de l'envelopper dans une fonction anonyme, comme ceci:

 funct(a, function(){foo(x)}); 

Si vous préférez, vous pouvez également utiliser la fonction apply et avoir un troisième paramètre qui est un tableau des arguments, comme tel:

 function myFunc(myArray, callback, args) { //do stuff with myArray //... //execute callback when finished callback.apply(this, args); } function eat(food1, food2) { alert("I like to eat " + food1 + " and " + food2 ); } //will alert "I like to eat pickles and peanut butter" myFunc([], eat, ["pickles", "peanut butter"]); 

Je préférerais suggérer de créer une variable comme ci-dessous:

 var deleteAction = function () { removeABC(); }; 

Et le transmettre comme un argument comme ci-dessous:

 removeETC(deleteAction); 

Dans la méthode removeETC, exécutez ceci comme ci-dessous:

 function removeETC(delAction){ delAction(); } 

Ce que vous avez mentionné est légal. Ici, foo(X) sera appelé et sa valeur renvoyée sera servie comme paramètre à la méthode funct()

Et que souhaiteriez-vous qu'il atteigne? Il semble que vous avez mélangé une déclaration de fonction avec un appel de fonction.

Si vous souhaitez passer un autre résultat d'appel à une fonction, écrivez simplement funct(some_array, foo(x)) . Si vous souhaitez passer une autre fonction elle-même, écrivez funct(some_array, foo) . Vous pouvez même passer une fonction appelée anonyme funct(some_array, function(x) { ... }) .

En fait, il semble un peu compliqué, ce n'est pas le cas.

Obtenez la méthode comme paramètre:

  function JS_method(_callBack) { _callBack("called"); } 

Vous pouvez donner comme méthode de paramètre:

  JS_method(function (d) { //Finally this will work. alert(d) });