Javascript: Fonction en paramètre

Javascript: Fonction en paramètre - HTML/CSS - Programmation

Marsh Posté le 22-09-2006 à 22:35:24    

Bonjour,
 
Comment doit-on écrire la fonction ma_fonction(fonc) pour qu'elle puisse prendre une fonction en paramètre ?
 
Exemple: j'appelle

Code :
  1. ma_fonction(autre_fonction)

et je voudrais que dans le code de ma_fonction() soit appelée autre_fonction() ?
 
Merci bien. :)

Reply

Marsh Posté le 22-09-2006 à 22:35:24   

Reply

Marsh Posté le 23-09-2006 à 03:00:17    

non tu mets pas une fonction en parametre
dis nous plutot ce que tu veux faire parce que ca semble n avoir aucun sens exposé ainsi :/

Reply

Marsh Posté le 23-09-2006 à 05:07:08    

Code :
  1. function f1(param1, param2) {
  2. blabla;
  3. }
  4. function f2(f) {
  5.   var i = f("val1", "val2" );
  6. alert(i);
  7. }

Reply

Marsh Posté le 23-09-2006 à 13:04:58    

Cela dit, c'est possible avec eval() de donner une fonction en paramètre, mais c'est pas bien recommendable :/

Reply

Marsh Posté le 23-09-2006 à 13:09:54    

tiens en php aussi on dit qu eval c est le mal et j ai jamais compris pourquoi en fait :$

Reply

Marsh Posté le 23-09-2006 à 13:12:42    

gooopil a écrit :

Cela dit, c'est possible avec eval() de donner une fonction en paramètre, mais c'est pas bien recommendable :/


[:natas] Tu as vu ce que j'ai posté ???
J'ai passé une fonction en paramètre

Reply

Marsh Posté le 23-09-2006 à 13:18:09    

gatsu35 a écrit :

[:natas] Tu as vu ce que j'ai posté ???
J'ai passé une fonction en paramètre


 
Oui j'ai vu ton code, et ça marche ce truc ?
Si tu fais f2("f1" ) ? ou f2(f1) ?

Message cité 1 fois
Message édité par gooopil le 23-09-2006 à 13:19:40
Reply

Marsh Posté le 23-09-2006 à 13:26:04    

ah c est un peu la technique du window.onload = mafonction;  
j avais pas compris a la premiere lecture
 
sinon pourquoi c est mal eval ? :o

Reply

Marsh Posté le 23-09-2006 à 13:31:26    

Code :
  1. function fuckYou(param1, f) {
  2.    f(param1);
  3. }
  4. function f(param) {
  5.   alert(param);
  6. }


tu peux meme faire comme ça :  

Code :
  1. function fuckYou(param1, function(param) {
  2.     alert(param);
  3.   }
  4. ) {
  5.    f(param1);
  6. }


 
Vas y teste. là on passe une reference de fonction et donc ca marche. Le eval c'est crade et je vois pas comment vous voulez l'utiliser dans ce cas.
 
Le eval c'est seulement utile quand tu veux qu'un utilisateur tape du Javascript dans un champ et que tu veux l'executer.
sinon aucun intérêt et ça relève tu codage de porc.

Message cité 1 fois
Message édité par gatsu35 le 23-09-2006 à 13:32:11
Reply

Marsh Posté le 23-09-2006 à 13:46:53    

gatsu35 a écrit :

Code :
  1. function fuckYou(param1, f) {
  2.    f(param1);
  3. }
  4. function f(param) {
  5.   alert(param);
  6. }


tu peux meme faire comme ça :  

Code :
  1. function fuckYou(param1, function(param) {
  2.     alert(param);
  3.   }
  4. ) {
  5.    f(param1);
  6. }


 
Vas y teste. là on passe une reference de fonction et donc ca marche. Le eval c'est crade et je vois pas comment vous voulez l'utiliser dans ce cas.


J'ai testé entre temps, je connaissais pas cette possibilité, c'est interresssant :)

gatsu35 a écrit :


Le eval c'est seulement utile quand tu veux qu'un utilisateur tape du Javascript dans un champ et que tu veux l'executer.
sinon aucun intérêt et ça relève tu codage de porc.


On est entièrement d'accord la dessus !

Reply

Marsh Posté le 23-09-2006 à 13:46:53   

Reply

Marsh Posté le 23-09-2006 à 14:10:52    

ha j aime bien le deuxieme exemple
donc c est possible désolé paowz :D

Reply

Marsh Posté le 23-09-2006 à 14:26:48    

gooopil a écrit :

Cela dit, c'est possible avec eval() de donner une fonction en paramètre, mais c'est pas bien recommendable :/


[:vomi]

gooopil a écrit :

Oui j'ai vu ton code, et ça marche ce truc ?
Si tu fais f2("f1" ) ? ou f2(f1) ?


f2(f1).
 
En javascript (comme dans pas mal de langages, le PHP n'étant pas un langage mais une merde en bâtons) une fonction est un objet comme un autre. C'est le principe "function as first-class object" qui existe dans tous les langages fonctionnels, et un certain nombre de langage impératifs/objets (le C a les function-pointers, Python et JS ont des objets fonctions, Ruby et Smalltalk ont des "blocks" qui sont fondamentalement des fonctions avec une syntaxe spécifique, ...).
 
Dans ces langages, une fonction peut être utilisée comme argument, comme valeur de retour d'une autre fonction, ou les deux. Les fonctions manipulant d'autres fonctions sont appelées "high-order functions" (parce qu'elles manipulent des manipulateurs d'objets au lieu de ne manipuler que des objets), et leur utilisation "higher-order programming".  
 
En JS, écrire

Code :
  1. function foo() {
  2.    // blabla
  3. }


est parfaitement équivalent à

Code :
  1. var foo = function () {
  2.    // blabla
  3. }


Et `foo` est appelé de la même manière dans les deux cas:

Code :
  1. foo()


mIRROR a écrit :

sinon pourquoi c est mal eval ? :o


Parce que c'est lent, parce que c'est habituellement inutile, et parce que ça pose un risque de code-injection.

Message cité 1 fois
Message édité par masklinn le 23-09-2006 à 15:47:07

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 23-09-2006 à 14:50:35    

masklinn a écrit :

En javascript une fonction est un objet comme un autre.


 
ca je commencais a le comprendre un peu genre les evenements, les prototypes toussa  
mais c est encore assez nouveau ^^
 
 

masklinn a écrit :

une fonction peut être utilisée comme [...] valeur de retour d'une autre fonction


 
tiens ca aussi c est marrant

Reply

Marsh Posté le 23-09-2006 à 22:34:45    

Et bien merci à vous d'avoir répondu avec autant d'avis :)
 
Cordialement.  :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed