Bonjour à tous,
j'ai un petit souci avec le passage de variable utilisé au sein d'une fonction: Du fait du "closure" (je ne connais pas le terme Français), je n'obtiens pas la variable escompté.
Je vais donner un exemple simplifié:
Imaginons les structures suivantes:
Code :
var actions = { 'UP': 1, 'DOWN': 2, 'LEFT': 3, 'RIGHT': 4 }; var buttons = ['UP', 'DOWN', 'LEFT', 'RIGHT'];
|
Si je procède ainsi:
Code :
for (var b in buttons) { var index = actions[buttons[b]]; bindKey(buttons[b], function () { // bindKey() est une fonction que j'ai créer qui me permet d'associer à une touche un callback... alert(index); }); }
|
Quand j'appuie sur les touches UP, DOWN, LEFT et RIGHT, alert(index) m'affiche toujours undefined car index c'est fait modifier entre temps (sorte de variable global dû au "closure"...)
Par contre, si je procède ainsi:
Code :
function bindKey2(button, index){ bindKey(button, function () { alert(index); }); } for (var b in buttons) { var index = actions[buttons[b]]; bindKey2(buttons[b], index); }
|
Dans ce cas, alert(index) m'affiche bien 1, 2, 3, 4 et non undefined. Ceci est du au fait que en appelant la fonction bindKey2, les variables passé en paramètre sont des instances de ces variable et non des références aux variables global.
Ma question est la suivante: Comment écrire ceci sans passer par une fonction intermédiaire (bindKey2 dans mon exemple)?
Message édité par ZeBorG le 23-04-2009 à 01:11:54