problème de "closure" (résolut) [JavaScript] - HTML/CSS - Programmation
Marsh Posté le 22-04-2009 à 22:48:49
si c était juste un problème de closure t aurais pas 4 fois "4" plutot ?
je pense plutot que comme ta callback se lance sur un event ca décale ton scope
t as essayé de déclarer index au meme niveau que bindKey ?
Marsh Posté le 22-04-2009 à 23:04:47
à tester
Code :
|
Ca marche pas
Tu as le code de ton bindKey ?
Marsh Posté le 23-04-2009 à 00:04:07
Bon ca marche comme ca avec une vrai closure :
Code :
|
cIndex devient une sorte de variable statique et c'est elle qu'on affiche plutot qu'index, qui a évolué entre l'instanciation de la fonction et son affichage.
version plus lisible
Code :
|
Marsh Posté le 23-04-2009 à 00:36:20
Je me disais bien que la réponse allait être évidente. Suffisait d'y penser
Merci bien
Marsh Posté le 23-04-2009 à 00:40:15
De rien
Ca m'a permis de me rendre compte que je passais souvent bcp de temps à gérer le scope à coups de call et apply, alors que dans la majorité des cas, une bonne closure fait l'affaire
Marsh Posté le 23-04-2009 à 01:06:13
Pour que ce soit un peu plus claire dans ma tête j'ai externalisé la closure de la manière suivante:
Code :
|
Merci encore
Marsh Posté le 21-04-2009 à 11:56:06
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:
Si je procède ainsi:
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:
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