在初始条件之外迭代for循环

时间:2016-07-22 18:07:08

标签: javascript loops for-loop

例如,假设我有正常的循环:

for(var i = 0; i < 25; i++)
{
       //code executes here
}

注意i++我知道它迭代循环但是,我很想知道我是否可以迭代循环中的其他地方。像这样:

for(var i = 0; i < 25)
{
     //code executes here
     i++;
}

我试图实现它,但它没有用。是否可以这样做?

3 个答案:

答案 0 :(得分:5)

for循环标题中必须有第三个表达式,但它不必执行任何操作,实际上可以为空。所有你需要的是分号。

for(var i = 0; i < 25; )
{
       //code executes here
       i++; // increments "outside of initial conditions"
}

请注意for循环结构以它的形式存在,因为这是一种非常常见的模式,并且只要有可能就坚持使用它是避免不愉快错误的好主意。例如,这意味着您必须小心循环体中的continue语句:

for (var i = 0; i < 25; ) {
  // code ...
  if (whatever)
    continue;
  // code ...
  i++;
}

continue循环中的for语句评估第三个标头表达式,但它将跳过循环体内的表达式。

答案 1 :(得分:1)

您可以将任何语句组合用于C风格的“for”循环。

<强>初始化程序

第一个语句是初始化程序。这可能是空白的。

for (var i = 0; ...)      // initializing in loop
for (; ...)               // initializing outside of loop

休息条件

下一个语句是条件:除非循环中有break语句,否则通常不能为空,否则for循环将变为无限。这是“for”循环和“while”循环之间的最大区别,所以不要忽略它。

for (;;) { 
    break;
}

<强>增量器

最后的陈述是增量。这会增加该值,以便触发中断条件。只要循环的所有分支都将增加值,您也可以轻松省略它。

for (var i = 0; i < 25;) {
    i++;     // here's our incrementor
}

为什么C风格的循环在循环中有条件

将完整的C风格for循环分解为每个部分,执行以下操作:

var i = 0;
for(;;) {
    if(i < 25) {
        // your normal code would go here
        i++;
    }
    else {
        break;
    }
}

有很多的原因,它被压缩到“for”循环中的单个块中:编写这样的代码很冗长,容易出错,并且很容易意外地创建无限循环(崩溃程序或耗尽CPU直到程序退出)。

为什么您的示例失败

你需要明确声明你有一个空白语句,循环内至少有2个分号(3个语句)。否则,无法解释代码。以下行只有2个分号:

for(var i = 0; i < 25)

正确的行如下:

for(var i = 0; i < 25;)

<强>文摘

分解for循环以更改中断条件或增量器是不良形式。不要这样做。但是,如果您必须,这可能是想要使用“while”循环的情况。通常,您希望将所有合适的“while”循环转换为“for”循环,但很少有例外。请注意:这很容易导致无限循环,耗尽资源直到你结束解释器。 “For”循环可以保护你免受这种伤害。

答案 2 :(得分:0)

您可能对break和continue语句感兴趣。它们可以让您更好地控制循环。

//test if prime
var testInt = 42
for(int i = -10; i < testInt; i++) {
if(i<2) continue;
if(testInt%i==0) break;
}

如果没有事先更改变量的值,请确保没有调用continue。否则会创建一个无限循环。

javascript中的无限循环非常糟糕。它冻结了浏览器和调试器,这意味着它很难调试。