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, время: 21:40. |