2009-07-01 2 views
-3

по какой-то больной причине, мои идентификаторы productID [addIndex] = allProductIDs [lastProductFoundIndex + i]; вызывает мое приложение, чтобы спина в бесконечный цикл:Попытка добавить значения к массиву приводит к тому, что приложение вращается в бесконечный цикл

numberOfImagesToDisplay установлен в 4

if (state == "next") 
{ 
    for(var a = 0; a < numberOfImagesToDisplay; a++) { 
     alert("a=" + a + ", numImages=" + numberOfImagesToDisplay) 

     if (a > 0) { addIndex = productIDs.length + 1; } 
     alert("I'm in GetNextProductIDs() 1"); 
     //var lastProductFoundIndex = $.inArray(lastProductID, allProductIDs); 
     //alert("I'm in GetNextProductIDs() 2"); 

     if (lastProductIndex >= 0) { 
      alert("I'm in GetNextProductIDs() 3"); 
      //productIDs[addIndex] = allProductIDs[lastProductFoundIndex + i]; 
     } 
    } 
} 

Если я достаю эту линию, он движется дальше.

Обновление: Решено. lastProductIndex не определен. Так что происходит, так это то, что он доберется туда, и цикл закончится, но это странно, потому что обратный вызов снова вызывался, когда он должен был закончиться. Чтобы метод обратного вызова продолжал вызывать этот метод, и этот метод заканчивался в этом месте, снова будет вызван метод обратного вызова, и поэтому у вас был бесконечный цикл.

+0

Что вы подразумеваете под «вращением в бесконечный цикл»? В отладчике, что он делает? Он просто не возвращается? Возможно ли, что недопустимый индекс вызывает функцию для исключения? –

+0

У вас есть возможность добавить еще код и удалить ошибки. Цикл for даже не работает (инициализирует a, но увеличивает i). lastProductIndex не определен нигде в этом фрагменте и т. д. –

+2

Вы отправляете один вопрос после другого, пытаясь решить одну проблему. Попробуйте опубликовать весь код, объясните, что вы пытаетесь сделать, чтобы это было проще для всех участников. – SolutionYogi

ответ

1

Это очень странно. Все, что я могу думать, это то, что у вас есть стрельба onpropertychange, которая также изменяет i. Знаю, майор.

Что делать, если вы добавили ключевое слово var в ваш цикл for? Это превратило бы его в локальную переменную вместо глобальной переменной, так что никакая другая функция не могла бы случайно удалить ваш индекс цикла.

for (var i = 0; i < numberOfImagesToDisplay; i++) 

Примечание: Вы должны иметь var там, это ли не проблема.

Обновление: Что делает alert("i="+i+", numImages="+numberOfImagesToDisplay) отображение каждой итерации через вашу петлю? Имеют ли эти переменные ожидаемые значения?

Вы уверены, что это петля застряла? Возможно, это еще один цикл. Может быть, вы повторно входите в этот цикл, тем самым получая повторяющиеся предупреждения? Я просто не вижу, как эта строка может привести к тому, что этот цикл станет бесконечным циклом.

+0

вар не имеет значения. Опять же, если я удаляю эту строку, все в порядке, и она полностью прекращает мою функцию: productIDs [addIndex] = allProductIDs [lastProductFoundIndex + i]; – PositiveGuy

+0

странно, я получаю 0 и 4 каждый раз. wtf – PositiveGuy

1

Я не вижу, чтобы вы увеличивали переменную a там, где угодно, но вы увеличиваете переменную i в своем цикле. a поэтому всегда будет 0 -

for(var a = 0; a < numberOfImagesToDisplay; i++) 
+0

Я обновил исходное сообщение ... должен быть a, и это то, что у меня есть в моем коде. Сожалею. – PositiveGuy

1

Это не связано с вашей подозреваемой проблемы линии, но на линии

for(var a = 0; a < numberOfImagesToDisplay; i++) 

ваши настройки а = 0 и цикл будет работать, пока в < номерOfImagesToDisplay. Я не вижу нигде, где вы увеличиваете или меняете a, чтобы выйти из цикла for.

Смежные вопросы