for(var i = 0; i<5; i++){
setTimeout(function(){
alert(i)
}, 1000)
}
var i = 0; //инициализация
!function next(exit) {
if(i >= 5) return exit(); //выход из цикла, в отличии от цикла for проверяем обратное условие
//выполняем что-то в цикле
alert(i);
//обновляем счетчик и запускаем следующую итерацию, в нашем случае она будет обернута в setTimeout
i++;
setTimeout(next, 1000, exit);
}(function() {
//здесь пишем код, который должен выполняться по завершении цикла
});