这个“for(;;)”语法在Javascript中是如何工作的?

时间:2013-05-30 17:55:45

标签: javascript syntax

我在开源Javascript库中遇到了for的奇怪语法。

for (;;) {
}

这甚至做了什么?有谁能回答?

6 个答案:

答案 0 :(得分:10)

它是“永远循环”,它在C,C ++,C#,Java等中的工作方式相同。你有一个for语句

  • 没有初始化步骤
  • 没有终止检查(=>永远继续)
  • 没有循环结束步骤

答案 1 :(得分:4)

这是一个无限循环,就像while(true)

答案 2 :(得分:3)

正如其他人已经指出的那样,如果将永远运行,但你仍然可以用break结束循环。喜欢:

for (;;) {
    if (condition) {
        break;
    }
}

Mozilla 有一个很好的细分javascript如何评估for循环:

for ([initialization]; [condition]; [final-expression])
   statement
  

<强>初始化
      表达式(包括赋值表达式)或变量声明。通常用于初始化计数器变量。这个   表达式可以选择使用var关键字声明新变量。   这些变量不是循环的局部变量,即它们是相同的   for循环所在的范围。此表达式的结果将被丢弃。

     

<强>条件
      在每次循环迭代之前要计算的表达式。如果此表达式的计算结果为true,则执行语句。这有条件的   测试是可选的。如果省略,则条件始终计算为true。   如果表达式的计算结果为false,则执行将跳转到第一个表达式   在for构造之后的表达式。

     

<强>最终表达
      要在每次循环迭代结束时计算的表达式。这发生在下一次条件评估之前。一般用来   更新或增加计数器变量。

     

<强>语句
      只要条件计算为true就执行的语句。要在循环中执行多个语句,请使用块   声明({...})对这些陈述进行分组。

与此问题最相关的是条件部分:

  

此条件测试是可选的。如果省略,则始终为条件   评估为真。

答案 3 :(得分:2)

许多语言中的简单/空;充当空白但真实(可执行)的陈述。

因此,在for循环中,所有三个表达式都是真的,总是匹配,因此会导致无限循环。


它也在Wikipedia上。根据维基页面

  

使用此样式代替无限while(1)循环以避免a   警告Visual C++


if语句或while循环的控制表达式求值为常量。如果while循环的控制表达式是常量,因为循环将在中间退出,请考虑用for循环替换while循环。您可以省略 for 循环的初始化,终止测试和循环增量,这会导致循环无限(如while(1))并且您可以退出循环for声明的主体。

答案 4 :(得分:2)

这对循环for (;;) {}有效,如果在for循环中没有给出条件,则默认为true。所以循环无限运行。与for (;1;) {}

相同

此外,不仅在Javascript中它的真实性在C,C#语言等等。

阅读本文:Is “for(;;)” faster than “while (TRUE)”? If not, why do people use it?,了解为什么有些程序员可能更喜欢for (;;) {}而不是简单while(true){}(有趣)

答案 5 :(得分:0)

它运行无限循环,因为

本质上,for循环是另一个循环的缩短版本,使用此语法

for(a;b;c){
}

a;
while(b){

c;
}

所以循环永远,因为b是空的,并且它没有增量运算符来改变任何东西。 基本上,它是无限的无限循环。 编辑:显然,空命令的计算结果为真。