Tenir compte telle boucle:JavaScript et boucle
for(var it = 0; it < 2; it++)
{
setTimeout(function() {
alert(it);
}, 1);
}
La sortie est:
=> 2
=> 2
Je voudrais qu'il soit: 0, 1. Je vois deux façons de le fixer:
Solution # 1.
Celle-ci étant basée sur le fait que nous pouvons transmettre des données à setTimeout.
for(var it = 0; it < 2; it++)
{
setTimeout(function(data) {
alert(data);
}, 1, it);
}
Solution # 2.
function foo(data)
{
setTimeout(function() {
alert(data);
}, 1);
}
for(var it = 0; it < 2; it++)
{
foo(it);
}
Y at-il d'autres alternatives?
+1. Cependant, vous pouvez légèrement modifier cela en changeant la signature de la méthode à: 'function (m) {/ * code * /}) (it);' – Alan
+1, mais quelqu'un peut-il m'expliquer pourquoi cela fonctionne ?! –
@digorydoo La fonction déclarée dans la boucle est entourée de parenthèses suivies d'un ensemble de parenthèses qui agissent pour appeler immédiatement la fonction. Puisque les variables sont étendues à la fonction dans laquelle elles sont déclarées (ou portée globale si elles ne sont pas déclarées dans une fonction), la valeur de 'it' dans chaque itération est assignée à la variable' m' qui est étendue à la fonction exécutée immédiatement. –