Выход из JavaScript "для" цикла с использованием False?
Я не знал, что это возможно (не так ли?)
Приведенный ниже код, по-видимому, записывает значения от 1 до 5, а затем выходит из цикла "for", поскольку возвращается значение "false".
function x() {
for (var i = 0; i < 10; i++) {
console.log(i);
if (i == 5) return false;
}
return true
}
console.log(x());
Мой вопрос:
Почему возникают короткие замыкания цикла for, когда возвращается "false"? Я посмотрел на MDN, но там нет ничего об использовании 'false' для выхода из цикла for. Также пытался смотреть на спецификации ECMA, но, к сожалению, слишком нуб.
Почему функция не возвращает true в консоль, поскольку оператор return true существует после выполнения цикла for? Даже если false как-то возвращает "first", разве "true" не должно возвращаться последним или также?
5 ответов
return false
не нарушает вашу петлю, но возвращает контроль за спиной.
function x() {
for (var i = 0; i < 10; i++) {
console.log(i);
if (i == 5) return false;
}
return true
}
console.log(x())
Выход:
0
1
2
3
4
5
false //here returning false and control also
куда break
сломает ваш цикл вместо выхода из функции.
function x() {
for (var i = 0; i < 10; i++) {
console.log(i);
if (i == 5) break;
}
return true
}
console.log(x())
Будет выводить:
0
1
2
3
4
5 //after this loop is breaking and ouputing true
true
Оператор return завершает функцию, поэтому возвращаемая строка true недоступна. Надеюсь, это поможет.
Приведенный ниже код, по-видимому, записывает значения от 1 до 5, а затем выходит из цикла "for", поскольку возвращается значение "false".
Неправильно, это вырывается из for
цикл из-за return
не из-за false
, Вы могли бы написать return x
с тем же эффектом. Дело в том, return
немедленно выпадает из вольера function
любой цикл или условие выполняется в настоящее время.
Если вы не хотите путать операторы return или break, вы можете добавить только один логический флаг. В моем примере я использую флаг isFound для запуска цикла, пока ваши требования не будут выполнены или конец массива.
const arr = [1,2,3,4,5];
for(let i = 0, isFound; !isFound; i++){
if(i >= 3 || i >= arr.length){isFound = true;}
else { console.log(arr[i]);}
}
Таким образом, результат будет:
1
2
3
Цикл никогда не будет выполнен до 10. return false
вернет управление вызывающей функции x, как только i станет равным 5. return true
линия недоступна
Это твой код
function x() {
for (var i = 0; i < 10; i++) {
console.log(i);
if (i == 5) return false;
}
return true
}
console.log(x());
Выход:-
0
1
2
3
4
5
false
Если вы хотите, чтобы оно доходило до возвращаемого истинного утверждения, вы можете сделать что-то вроде добавления break
вместо return false
в for
петля.
for (var i = 0; i < 10; i++) {
console.log(i);
if (i == 5) break;//this will put it outside for loop
}