#javascript #function #for-loop #return #infinite-loop
#javascript #функция #for-цикл #Возврат #бесконечный цикл
Вопрос:
При выполнении итерации по for
циклу внутри моей функции, даже после достижения return
инструкции, цикл продолжается бесконечно.
На данный момент j
больше lister.length
. Он завершает for
цикл и в конце функции переходит обратно в for
цикл по кажущейся бесконечной схеме.
Такое поведение не имеет смысла для меня, поскольку return
инструкция должна завершать функцию.
Вот моя функция:
function permutationLoop(originalArray, listOfPermutations) {
// generates a permutation(Shuffle),and makes sure it is not already in the list of Perms
var lister = generatingPerms(originalArray, listOfPermutations);
//adds the permutation to the list
listOfPermutations.push(lister);
var tester = true;
//This for loop looks through the new permutation to see if it is in-order.
for (var j = 0; j < lister.length; j ) {
//This if statement checks to see as we iterate if it is in order
if (lister[j] > lister[j 1]) {
tester = false;
}
if (j == (lister.length - 1) amp;amp; tester == true) {
//Return the permutation number that found the ordered array.
return listOfPermutations.length;
//THIS IS NOT EXITING THE LOOP
}
if (j == lister.length - 1 amp;amp; tester == false) {
permutationLoop(originalArray, listOfPermutations);
}
}
}
Комментарии:
1. Можете ли вы привести пример входных данных, с помощью которых вы вызываете функцию (
generatingPerms
надеюсь, тоже, потому что это есть в коде, который вы используете), в идеале в живом фрагменте, чтобы мы могли сами увидеть, как работает функция, и попытаться ее отладить?2. Что такое
generatingPerms()
?3. Проблема в том, что
if (lister[j] > lister[j 1])
; ifj
является последним элементом,j 1
будет неопределенным и, следовательно, меньше последнего элемента, поэтомуtester
будет установлено значение false, а условие возврата IF для последнего элемента всегда равно false.
Ответ №1:
возможно, ваш оператор if недействителен, попробуйте протестировать с помощью if(true){ ..code.. }