[Js] : Passer arguments a fonction anonyme

Résolu/Fermé
Pignic - 18 janv. 2012 à 00:28
 Dr DIASOLUKA - 25 févr. 2015 à 15:53
Bonjour,
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:

3 réponses

matthoffman Messages postés 405 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
18 janv. 2012 à 11:09
Ce code devrait fonctionner:

maListeDElements[i].onclick = (function(i) {
        return function() {
            maFonction(i);
            };
        })(i);
0
Pignic13 Messages postés 6 Date d'inscription mercredi 18 janvier 2012 Statut Membre Dernière intervention 26 avril 2012
18 janv. 2012 à 11:14
Ça marche et c'est propre ! Parfait !
Merci beaucoup !
0
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);
0