Este código é produz 10 10s em vez do esperado 0 a 9, porque há uma referência a I no fechamento e, quando a função é executada, eu me tornei 10
função f1 () {for (var i = 0; i <10; i ++) {setTimeout (function () {alert (i);}, 1000);}} f1 ();Para resolver os problemas acima, você pode usar funções anônimas auto-executadas.
função f2 () {for (var i = 0; i <10; i ++) {(function (e) {setTimeout (function () {alert (e);}, 1000);}) (i);}} f2 ();A função anônima aqui toma i como um parâmetro, e aqui e terá uma cópia de I, e a referência é uma referência a E, que evita os problemas acima.