revisa el siguiente fragmento de código HTML/Javascript:¿Cuál es el alcance de una variable de Javascript declarada en un bucle 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>
Este salidas:
3, 3, 3, 0, 1, 2
que no es lo que estaba esperando - que estaba esperando la salida 0, 1, 2, 0, 1, 2,
I (incorrectamente) asumió que la función anónima que se está introduciendo en la matriz se comportaría como un cierre, capturando el valor de i
que se asigna cuando se crea la función, pero en realidad parece que i
se está comportando como una variable global.
¿Alguien puede explicar qué ocurre con el alcance de i
en este ejemplo de código y por qué la función anónima no está capturando su valor?
¡Respuesta correcta - gracias! - pero acepté la respuesta de Pointy porque "mi propia privacidad" + idaho me hizo reír a carcajadas ... –