Sé que puedo usar la palabra clave let aquí para obtener el resultado deseado, pero me gustaría saber por qué hacer clic en las alertas de elementos div #5 para cada div.
var div; var box = document.getElementById('box'); for (var i = 0; i < 5; i++) { div = document.createElement('div'); div.onClick = function() { alert('this is box # ' + i); } box.appendChild(div); } <div id="box"></div>Cuando asigna la función anónima al clic, no ejecuta su cuerpo. Su cuerpo de códigos se ejecuta solo cuando se hace clic en él, por lo que la primera vez que se usa la variable i en la función, ya tiene el valor de 4. Debe evaluar el valor actual de i mientras está en el bucle y colocarlo en la función generada. , por una función generadora de funciones. De lo contrario, tomará una referencia a i y usará siempre su último valor.