setTimeout в цикле
Привет, народ.
Поясните такое поведение, вот есть код for(var i = 0; i <= 5; i++) { setTimeout(function() { console.log(i); }, 500); } Я понимаю, что таймаут срабатывает один раз, после завершения цикла, т.е. в анонимную функцию попадает i = 6, но почему тогда в консоль результат выводится 6 раз, если цикл уже закончен? |
freezecoder,
от 0 до включая 5 (<=) -> шесть итераций |
потому что на каждой итерации в очередь бросается вызов. когда приходит очередь каждого вызова, они отрабатывают в существующем окружении, где i=6
|
Цитата:
|
for(var i = 0; i < 5; i++) { (function(i) { setTimeout(function() { console.log(i); }, 500); })(i); } Если же Вам нужно, что таймауты срабатывали по очереди, то никакой цикл не нужен: var i = 0; setTimeout(function() { alert(i); if(++i < 5) setTimeout(arguments.callee, 500); }, 500); |
Часовой пояс GMT +3, время: 22:55. |