Este código genera 10 10s en lugar de los esperados 0 a 9, porque hay una referencia a I en el cierre, y luego, cuando se ejecuta la función, me he convertido en 10
function f1 () {for (var i = 0; i <10; i ++) {setTimeOut (function () {alert (i);}, 1000);}} f1 ();Para resolver los problemas anteriores, puede usar funciones anónimas autoexecutadas.
function f2 () {for (var i = 0; i <10; i ++) {(function (e) {setTimeout (function () {alert (e);}, 1000);}) (i);}} f2 ();La función anónima aquí toma I como parámetro, y aquí tendrá una copia de I, y la referencia es una referencia a E, que evita los problemas anteriores.