finalCheck
становится ложным в некоторый момент, в результате чего data.pop()
не выполняется. Тогда цикл становится бесконечным.
data.pop()
возвращает удаленный элемент из массива. Если это значение оценивается как ложное, никакие элементы не будут удалены на следующей итерации, поэтому data.length
всегда будет больше нуля.
var data = [0, 1], finalCheck = false;
while( data.length > 0){
finalCheck = finalCheck && data.pop(); //Hello infinite loop
}
В показанном ранее примере finalCheck
уже false
до итерации, поэтому data.pop()
никогда не будет выполнен. Даже если finalCheck
инициализируется в true
, finalCheck
будет установлен в ноль и снова застрянет.
Чтобы исправить свой код, вы должны по крайней мере использовать:
while( data.length > 0 && finalCheck){
finalCheck = data.pop(); //Bye infinite loop
}