Q:

setTimeout и цикл for - каков порядок выполнения?

var count = 0;
for ( var i = 0; i < 4; i++ ) {
    setTimeout(
        function(){ 
            assert( i == count++, "Check the value of i." );
        },
        i * 200);
}

Объясните, пожалуйста, как работает этот код. Почему цикл бегает четыре раза со значением 4?

A:

Проблема с обработчиками в цикле

A:

демо
Сам setTimeOut работает асинхронно, то есть вне запускается 4 раза на выполнение функция assert i у Вас глобальная переменная и во время выполнения функции assert она уже равна 4 ем. Цикл пробегает быстрее.
явная демонстрация сего факта сначало цикл прошел потом сработали assert ы

