Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.01.2012, 21:26
Интересующийся
Отправить личное сообщение для Ferroks Посмотреть профиль Найти все сообщения от Ferroks
 
Регистрация: 09.09.2009
Сообщений: 25

цикл 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);
}
Ответить с цитированием
  #2 (permalink)  
Старый 23.01.2012, 21:39
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

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

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);
}

Последний раз редактировалось melky, 23.01.2012 в 21:41. Причина: скобки попутал
Ответить с цитированием
  #3 (permalink)  
Старый 23.01.2012, 21:40
Аватар для Amphiluke
   ☽
Отправить личное сообщение для Amphiluke Посмотреть профиль Найти все сообщения от Amphiluke
 
Регистрация: 07.01.2011
Сообщений: 254

Можно использовать замыкание
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);
}


Ага, опередили. =)
Ответить с цитированием
  #4 (permalink)  
Старый 23.01.2012, 21:45
Интересующийся
Отправить личное сообщение для Ferroks Посмотреть профиль Найти все сообщения от Ferroks
 
Регистрация: 09.09.2009
Сообщений: 25

Спасибо =)
Ответить с цитированием
  #5 (permalink)  
Старый 23.01.2012, 22:04
Интересующийся
Отправить личное сообщение для Ferroks Посмотреть профиль Найти все сообщения от Ferroks
 
Регистрация: 09.09.2009
Сообщений: 25

а как сделать чтоб цикл for не продолжался выполняться пока не выполниться функция в setTimeout?
Ответить с цитированием
  #6 (permalink)  
Старый 23.01.2012, 22:56
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бесконечный цикл Sundro Общие вопросы Javascript 8 08.08.2011 13:58
Передача контекста через setTimeout decadent jQuery 3 10.02.2011 19:01
цикл идет через 1н элемент розовый слоник Общие вопросы Javascript 8 07.02.2011 15:48
setTimeout в браузере IE и Opera leha66 Javascript под браузер 2 13.12.2010 13:02
setTimeout Воитель Общие вопросы Javascript 5 23.01.2009 10:36