Javascript Do while цикл останавливается только после одной итерации

У меня есть цикл do while, который останавливается только после одной итерации, хотя условие дает ложный результат более одного раза. Другое дело - все, что идет после оператора while, не выполняется. Код очень длинный, поэтому вот пример условия проверки:

do {
  let x = 0;  
  let y = 3;

  for (let j = 0; j < 9; j++) {
    if(j%2==0){
      x++;
    }
  }
} while (x < y);

Кто-нибудь знает почему?


person user11358047    schedule 02.04.2020    source источник


Ответы (2)


Причина в том, что x не определен. let имеет область видимости блока. и вы объявили x и y в блоке do, который не имеет области действия после блока. Если вы хотите использовать их в условии while, поместите их либо снаружи, либо измените let на var.

Вы получаете ошибку, и, следовательно, через некоторое время код не выполняется. Чтобы ощутить ошибку, окружите ее попыткой.

do {
  let x = 0;
  let y = 3;
  for (let j = 0; j < 9; j++) {
    if (j % 2 == 0) {
      x++;
    }
  }
} while (x < y);

do {
  var x = 0;
  var y = 3;
  for (let j = 0; j < 9; j++) {
    if (j % 2 == 0) {
      x++;
    }
  }
} while (x < y);
console.log(x)

Надеюсь это поможет!

person Sankhavaram Saitulasiram    schedule 02.04.2020
comment
Я бы просто определил lets вне _2 _... или, если вы настаиваете, vars. Хотя в JavaScript допустимо назначать переменную в блоке при ее проверке за пределами блока, некоторые редакторы выдадут ошибку, если вы не разрешите это ... поэтому я бы избегал этой практики и определял переменную, к которой оба блока имеют доступ. - person StackSlave; 03.04.2020

объем x и y внутри оператора do означает, что его нет для оператора while. Но ваш код зацикливается несколько раз

let x=0;  
let y=3;
do{

 
 for (let j=0; j<9; j++){
 if(j%2==0){x++;}
 console.log(x,y) 
   }
   
 }while(x<y);
 

   
do{
  let x=0;  
  let y=3;

 
 for (let j=0; j<9; j++){
 if(j%2==0){x++;}
 console.log(x,y) 
   }
   
 }while(x<y);
 

person DCR    schedule 02.04.2020