Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > for внутри for


Автор: neoks 15.8.2011, 15:16
Прошу не бить ногами, это невероятно но я толком не могу найти в инете почему ?
Почему цикл for не работает внутри цикла for, происходит это так, запускается первый цикл и прерывается вторым который успешно выполняет цикл.

Вот стало интересно почему так происходит и можно это вообще решить проблему, может и нельзя так ?

Автор: нуп 15.8.2011, 15:19
Значит где-то косяк, предположительно с 17- строке

Автор: rodnover 15.8.2011, 15:44
точки с запятой вконце фора нет?

Код

for (;;);


Автор: Evghenusi 15.8.2011, 16:31
может у вас в обоих циклах одна и так же переменная для инкремента (хз как правильно выразиться), и если всё же ошибка не в 17 строке, то покажите код

Автор: neoks 15.8.2011, 16:41
Ошибки вроде нет.
Вот отрывок кода:
Код

function show_bg(url,callback){
            for(i=0;i<7;i++){
                
            }
}
for(i=position;i < 7;i++){
                    
                    if(i==position){
                        find_block.eq(i).animate({left:'-500px',opacity:0},400);
                        show_bg(find_block.eq(position).attr('url'));
                    }
                    else{
                    
                    }
}


Не знаю почему но else не выполняется, срабатывает функция show_bg и все цикл прерывается, смотрел в firebug молчит.

Автор: Evghenusi 15.8.2011, 16:44
Цитата(neoks @  15.8.2011,  16:41 Найти цитируемый пост)
Ошибки вроде нет.


может у вас в обоих циклах одна и так же переменная для инкремента (хз как правильно выразиться)

Автор: neoks 15.8.2011, 16:44
Взял простой код для испытания так там все работает.

Код

function show_bg(){
    for(i=0;i<200;i++){
    
    }
}

for(i=0;i<6;i++){
    if(i==1){
        show_bg();
    }
    else{
        alert('f');
    }
}


Хм, почему же предыдущий не работает.

Добавлено через 2 минуты и 37 секунд
Цитата(Evghenusi @  15.8.2011,  16:44 Найти цитируемый пост)
может у вас в обоих циклах одна и так же переменная для инкремента (хз как правильно выразиться) 


И вправду работает  smile , а почему нельзя так, лан буду теперь знать !!!!

Автор: нуп 15.8.2011, 16:47
Код

function show_bg(url,callback){
            for(var i=0;i<7;i++){
                
            }
}
for(var i=position;i < 7;i++){
                    
                    if(i==position){
                        find_block.eq(i).animate({left:'-500px',opacity:0},400);
                        show_bg(find_block.eq(position).attr('url'));
                    }
                    else{
                    
                    }
}

А так

Автор: Evghenusi 15.8.2011, 16:48
Цитата(neoks @  15.8.2011,  16:44 Найти цитируемый пост)

И вправду работает  smile , а почему нельзя так, лан буду теперь знать !!!!

слава боженьке вы меня услышали

я всего лишь любитель, поэтому могу ошибаться, но я так понимаю логику:

первый цикл производит первую итерацию, в это время запускается второй и производит 7 итераций, меняя значение переменной, снова наступает очередь первого, и первый проверяя переменную получает новое значение, а именно i=7, а так как цикл до i < 7, то дальше и "двигаться" не надо.

если я не прав, буду рад критике

Автор: neoks 15.8.2011, 17:06
И все таки php и javascript разные вещи, по привычки из php как я всегда пользуюсь циклом for и токого не доводилось испытывать.
В справочниках пишут что цикл for почти одинаковые по  php, но не узнаеш что такое почти пока не испробуеш  smile 

Автор: нуп 15.8.2011, 17:13
Просто надо прочитать о области видимости переменной http://habrahabr.ru/blogs/javascript/78991/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)