Consultez l'extrait suivant du code HTML/Javascript:Quelle est la portée d'une variable Javascript déclarée dans une boucle for()?
<html>
<head>
<script type="text/javascript">
var alerts = [];
for(var i = 0; i < 3; i++) {
alerts.push(function() { document.write(i + ', '); });
}
for (var j = 0; j < 3; j++) {
(alerts[j])();
}
for (var i = 0; i < 3; i++) {
(alerts[i])();
}
</script>
</head><body></body></html>
Ce sorties:
3, 3, 3, 0, 1, 2
qui est pas ce que je me attendais - je me attendais à la sortie 0, 1, 2, 0, 1, 2,
I (incorrectement) supposé que la fonction anonyme poussée dans le tableau se comporterait comme une fermeture, en capturant la valeur de i
qui est affectée lorsque la fonction est créée - mais il semble que i
se comporte comme une variable globale.
Quelqu'un peut-il expliquer ce qui se passe à la portée de i
dans cet exemple de code, et pourquoi la fonction anonyme ne capture pas sa valeur?
Bonne réponse - merci! - mais j'ai accepté la réponse de Pointy parce que "mon propre privé" + idaho m'a fait rire à haute voix ... –