Javascript не завершает цикл for при вызове инструкции return

#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]) ; if j является последним элементом, j 1 будет неопределенным и, следовательно, меньше последнего элемента, поэтому tester будет установлено значение false, а условие возврата IF для последнего элемента всегда равно false.

Ответ №1:

возможно, ваш оператор if недействителен, попробуйте протестировать с помощью if(true){ ..code.. }