[Js] : Passer arguments a fonction anonyme
Résolu
Pignic
-
Dr DIASOLUKA -
Dr DIASOLUKA -
Bonjour,
Je souhaiterais savoir comment passer un argument à une fonction anonyme.
Voici un exemple de ce que je voudrais faire :
Donc, évidement, cela ne marche pas et dans le meilleur des cas, tous les éléments vont me faire une alerte de maListeDElements.length.
Je ne veux pas faire un
Voila pour mes maux... Une petite aide serai la bienvenue.
Merci,
Pignic.
Je souhaiterais savoir comment passer un argument à une fonction anonyme.
Voici un exemple de ce que je voudrais faire :
function maFonction(index) { alert(index); } function main () { var maListeDElements = blablablaPourRecupererMaListeDElements(); for (var i = 0; i < maListeDElements.length; ++i) { maListeDElements[i].onclick = function() { maFonction(i); }; } } main();
Donc, évidement, cela ne marche pas et dans le meilleur des cas, tous les éléments vont me faire une alerte de maListeDElements.length.
Je ne veux pas faire un
maListeDElements[i].onclick = "maFonction(" + i + ")";car c'est trop moche et ça ne marcherai pas une fois intégré dans mon code (car l'exemple que j'ai donné n'est qu'un exemple :-) ).
Voila pour mes maux... Une petite aide serai la bienvenue.
Merci,
Pignic.
A voir également:
- [Js] : Passer arguments a fonction anonyme
- Copiez l'image dans un logiciel d'édition d'images ou un outil en ligne comme js paint ou pixlr e. remplissez les cases en suivant le code couleur. des cases supplémentaires vont se remplir automatiquement. que représente le dessin ? ✓ - Forum Windows
- Arrondi js ✓ - Forum Windows
- Remplir une case de tableau avec une couleur grise avec texture de pointillés ✓ - Forum Photoshop
- Reproduction d'un dessin - Forum Graphisme
- Js/kryptik.ad ✓ - Forum Virus
3 réponses
Ce code devrait fonctionner:
maListeDElements[i].onclick = (function(i) { return function() { maFonction(i); }; })(i);
Chez moi cette forme n'a pas marché.
Voici ce qui a marché, et j'espère que ça répond à ton algorithme.
<script>
function maFonction(index,pfa2) {
alert(index+" & "+pfa2);
}
function blablablaPourRecupererMaListeDElements(){
return [1,2,3,4,5]
}
function main () {
var maListeDElements = blablablaPourRecupererMaListeDElements();
for (var i = 0; i < maListeDElements.length; ++i) {
maListeDElements[i] = (function(pfa) {
maFonction(i,pfa);
})(10);
}
}
main();
</script>
Remarque :
La forme suivante (sans parenthèses) marche aussi, mais elle réserve en permanence une place dans la mémoire pour la fonction et ses variables internes / locales, jusqu'à la fin de l'exécution de l'entièreté du programme, voire jusqu'à la fermeture du fichier le comportant, et parfois même cette partie de la RAM peut restée allouée jusqu'à ce qu'on éteigne l'ordinateur.
Elle est utile quand la fonction doit être utilisée à plusieurs (plus d'un) endroit(s) du programme, ou que les variables qu'elle crée ou qu'elle prépare doivent être utilisées à d'autres endroits du programme.
Tandis que la forme avec parenthèse ainsi que les variables qu'elle crée ou prépare ne restent en mémoire que temporairement, durant l'éxécution de la fonction puis cette zone de la mémoire est libérée une fois quitté la fonction (affectation dynamique de la mémoire).
Elle est utile seulement quand le bloc de fonction ainsi que ces variables internes / locales ne sont pas susceptibles d'être réutilisées ailleurs dans le corps du programme. Aussi bien le code de la fonction que ces variables disparaissent aussitôt l'exécution de la fonction quittée.
Si la fonction anonyme n'utilise aucune variable, on peut peut-être utiliser un code inline, mais c'est fort possible que la fonction inline laisse des garbages après sa traversée (exécution).
maListeDElements[i] = function(pfa) {
maFonction(i,pfa);
}(10);
Voici ce qui a marché, et j'espère que ça répond à ton algorithme.
<script>
function maFonction(index,pfa2) {
alert(index+" & "+pfa2);
}
function blablablaPourRecupererMaListeDElements(){
return [1,2,3,4,5]
}
function main () {
var maListeDElements = blablablaPourRecupererMaListeDElements();
for (var i = 0; i < maListeDElements.length; ++i) {
maListeDElements[i] = (function(pfa) {
maFonction(i,pfa);
})(10);
}
}
main();
</script>
Remarque :
La forme suivante (sans parenthèses) marche aussi, mais elle réserve en permanence une place dans la mémoire pour la fonction et ses variables internes / locales, jusqu'à la fin de l'exécution de l'entièreté du programme, voire jusqu'à la fermeture du fichier le comportant, et parfois même cette partie de la RAM peut restée allouée jusqu'à ce qu'on éteigne l'ordinateur.
Elle est utile quand la fonction doit être utilisée à plusieurs (plus d'un) endroit(s) du programme, ou que les variables qu'elle crée ou qu'elle prépare doivent être utilisées à d'autres endroits du programme.
Tandis que la forme avec parenthèse ainsi que les variables qu'elle crée ou prépare ne restent en mémoire que temporairement, durant l'éxécution de la fonction puis cette zone de la mémoire est libérée une fois quitté la fonction (affectation dynamique de la mémoire).
Elle est utile seulement quand le bloc de fonction ainsi que ces variables internes / locales ne sont pas susceptibles d'être réutilisées ailleurs dans le corps du programme. Aussi bien le code de la fonction que ces variables disparaissent aussitôt l'exécution de la fonction quittée.
Si la fonction anonyme n'utilise aucune variable, on peut peut-être utiliser un code inline, mais c'est fort possible que la fonction inline laisse des garbages après sa traversée (exécution).
maListeDElements[i] = function(pfa) {
maFonction(i,pfa);
}(10);