Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   цикл for и setTimeout (https://javascript.ru/forum/misc/25049-cikl-i-settimeout.html)

Ferroks 23.01.2012 21:26

цикл for и setTimeout
 
function b(a) {
    return a * a;
}
for (a = 0; a < 5; a++) {
    c = a;
    if (a == 3) {
        setTimeout(function() {
            c = b(a);
            alert(c);
//как сделать чтоб тут алерт выполнился когда а = 3;?
// а то выполняется когда уже а = 5
        }, 5000);
    }
    alert(c);
}

melky 23.01.2012 21:39

обернуть в замыкание

function b(a) {
    return a * a;
}
for (a = 0; a < 5; a++) {
    c = a;
    if (a == 3) {
    (function(a){
        setTimeout(function() {
            c = b(a);
            alert(c);
//как сделать чтоб тут алерт выполнился когда а = 3;?
// а то выполняется когда уже а = 5
        }, 5000);
    })(a);
    }
    alert(c);
}

Amphiluke 23.01.2012 21:40

Можно использовать замыкание
function b(a) {
    return a * a;
}
for (var a = 0; a < 5; a++) {
    c = a;
    if (a == 3) {
        setTimeout((function(aParam) {
            return function() {
                c = b(aParam);
                alert(c);
            };
        })(a), 5000);
    }
    alert(c);
}


Ага, опередили. =)

Ferroks 23.01.2012 21:45

Спасибо =)

Ferroks 23.01.2012 22:04

а как сделать чтоб цикл for не продолжался выполняться пока не выполниться функция в setTimeout?

melky 23.01.2012 22:56

это уже асинхронное программирование. код там будет совсем другой
но .. исполнение кода блокируется, пока не выполнится функция в таймауте.


Часовой пояс GMT +3, время: 00:45.