是否存在循环“;重新开始”;

Is there a loop "start-over"?

本文关键字:重新开始 存在 循环 是否      更新时间:2023-09-26
  • continue;可以停止循环并移动到下一个循环
  • break;停止循环并移动到循环的

难道没有某种start;可以停止循环并移动到循环的开始吗?

我知道只需修改i的值就可以很容易地实现这三个操作,但我总是试图寻找已经构建的it函数。

将循环变量的值重置为初始值,然后调用continue是最接近的。

例如:

for(var i=0; i<20; i++) {
  if(somecondition) {
    i=-1; continue;
  }
}

否-没有关键字或其他自动方式。

正如您已经提到的,您可以在循环中修改循环条件变量。如果它是一个简单的i计数器,那就很容易了,但当然,你可能要做的初始化工作比简单的计数器还要多。

或者你可以做一些类似的事情:

restartLoop:
while (true) {
   for (var i=0, j=100000, x="test"; i < 1000; i++, j--, x+= ".") {
      if (/*some condition, want to restart the loop*/)
          continue restartLoop;
   }
   break;
}

continue restartLoop将跳回来继续while循环的下一次迭代,然后立即从头开始for循环,包括所有初始化代码。如果for正常退出,之后的break语句将脱离containingwhile循环。

我真的不建议在一般意义上这样做,但如果你的循环初始化过程真的很复杂,那可能是值得的,因为这样你就不需要在循环中重复了。如果你需要进行比for语句的初始化表达式更适合的初始化,你可以很容易地将其放在while中的for循环之前,它将全部重新运行。。。

如果你想避免跳转或我们许多人都被训练来避免的类似goto语句,你可以为循环使用一个本地函数,并对返回值进行测试,看看你是否应该再次调用它:

function doItAll() {
    // put state variables other than the actual loop control here
    function doTheLoop() {
        for(var i=0; i<20; i++) {
            if (somecondition) {
                return(true);    // run the loop again
            }
        }
        return(false);   // done running the loop
    }
    while (doTheLoop()) {}
    // do some things after the loop
}

否。(只是为了排除"我也没听说过"的可能性——在https://developer.mozilla.org/en/JavaScript/Reference/Statements.)

continue的工作原理是简单地跳过循环体的其余部分。break的工作原理是跳过循环体的其余部分,然后结束循环。start函数必须以某种方式将程序的状态"倒带"到循环开始时的位置,但不是程序的所有状态,因为可能你也不想失去你所做的事情,这不是我见过的任何编程语言都能提供的。

您可以在递归调用自身的函数中使用循环:

function loopIt(numTimes) {
            if (numTimes < 3) {
                for (x = 0; x < 20; x++) {
                    if (x == 5) {
                        loopIt(numTimes+1);
                        break;
                    }
                }
            }     
        }

很明显,您可以更改条件以符合您的逻辑,因为上面的例子很简单。