Этот код выводит 10 10s вместо ожидаемого от 0 до 9, потому что есть ссылка на I в закрытии, а затем, когда функция выполнена, я стал 10
Функция f1 () {for (var i = 0; i <10; i ++) {setTimeout (function () {alert (i);}, 1000);}} f1 ();Чтобы решить вышеуказанные задачи, вы можете использовать самостоятельные анонимные функции.
Функция f2 () {for (var i = 0; i <10; i ++) {(function (e) {setTimeout (function () {alert (e);}, 1000);}) (i);}} f2 ();Анонимная функция здесь принимает I в качестве параметра, и здесь E будет копия I, и ссылка является ссылкой на E, которая позволяет избежать вышеуказанных проблем.