3

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

for (;;) {
}

这甚至有什么作用?谁能回答?

4

6 回答 6

10

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

  • 没有初始化步骤
  • 没有终止检查(=> 永远继续)
  • 没有循环结束步骤
于 2013-05-30T17:57:47.177 回答
4

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

于 2013-05-30T17:58:01.360 回答
3

正如其他人已经指出的那样, if 将永远运行,但您仍然可以使用break. 像:

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

Mozilla 对 javascript 如何评估for循环进行了很好的细分:

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

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

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

final-expression
每次循环迭代结束时要计算的表达式。这发生在下一次条件评估之前。一般用于更新或递增计数器变量。

语句
只要条件评估为真,就会执行的语句。要在循环中执行多个语句,请使用块语句 ({ ... }) 对这些语句进行分组。

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

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

于 2013-05-30T18:04:56.897 回答
2

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

因此,在 for 循环中,所有三个表达式都为真,始终匹配,因此导致无限循环。


它也出现在维基百科上。根据维基页面

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


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

于 2013-05-30T17:58:39.630 回答
2

for (;;) {}如果在 for 循环中未给出条件,则这是有效的 for 循环,默认情况下为 true。所以循环无限运行。如同for (;1;) {}

此外,不仅在 Javascript 中,它在 C、C# 语言中也是如此。

阅读本文:“for(;;)”比“while (TRUE)”快吗?如果不是,人们为什么要使用它?了解为什么有些程序员可能更喜欢for (;;) {}简单while(true){}(有趣)

于 2013-05-30T17:59:42.400 回答
0

它运行一个无限循环,因为

从本质上讲,for 循环是另一个循环的缩短版本,使用这种语法

for(a;b;c){
}

a;
while(b){

c;
}

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

于 2013-05-30T17:59:27.673 回答