【问题标题】:Javascript Do while loop stops after one iteration onlyJavascript Do while 循环仅在一次迭代后停止
【发布时间】:2020-04-02 21:31:49
【问题描述】:

我有一个只在一次迭代后停止的 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);

有人知道为什么吗?

【问题讨论】:

    标签: javascript iteration do-while break


    【解决方案1】:

    原因是 x 未定义。 let 有一个块作用域。并且您在 do 块中声明了 x 和 y ,它在块之后没有范围。如果您想在 while 条件下使用它们,请将它们放在外面或将 let 更改为 var。

    您最终会遇到错误,因此代码不会在一段时间后执行。用 try catch 来感知错误。

    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)

    希望这会有所帮助!

    【讨论】:

    • 我只会在do... 之外定义lets,或者,如果您坚持使用vars。尽管在块外对其进行测试时在块中分配变量是有效的 JavaScript,但某些编辑器会产生错误,除非您允许它......因此我会避免这种做法并定义两个块都可以访问的变量。
    【解决方案2】:

    do 语句中 x 和 y 的范围意味着它不存在于 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);
     

    【讨论】: