在JavaScript中,for(;;){...}是一个无限循环的语法结构。它相当于for循环的一个特殊形式,其中条件部分为空。因此,这个循环会一直运行,直到遇到break语句或程序被终止。
在JavaScript中,for(;;)
创建了一个无限循环。它的语法与我们通常看到的相同,只是在分号之间没有代码。
for
循环的语法包括一个初始化器,后面是一个用于继续循环的条件,再后面是一个分号,最后是每次迭代后要运行的代码。
由于没有初始化器,没有评估为false的条件,也没有循环后的代码,因此循环会永远运行。
出现这个问题的原因是循环的条件永远为真,没有结束循环的判断。这可能是程序员的错误或者是故意为了创建一个无限循环。
解决这个问题的方法是在循环的条件中加入一个能够评估为false的判断,或者在循环体中添加一个跳出循环的语句,例如使用break
关键字。
下面是一个示例,演示了如何修复这个问题:
for(;;) { // 无限循环的代码 if (someCondition) { break; // 跳出循环 } }
在这个示例中,我们在循环体内部添加了一个条件判断,当满足某个条件时,使用break
关键字跳出循环。
通过这种方式,我们可以避免无限循环的问题,并在需要时正常结束循环。
在JavaScript中,使用for (;;)
表达式可以创建一个无限循环。这是因为在for循环中,可以省略在分号之间的部分,甚至可以省略所有部分。如果省略了条件部分,那么默认条件为true
,因此会导致无限循环。当然,你仍然可以使用break
或return
等语句来退出循环,从而使其不是无用的。
解决方法:
要解决这个问题,可以在循环体中添加条件判断语句,以在特定条件下退出循环。例如,可以使用if
语句来检查某个条件是否满足,如果满足则使用break
语句退出循环。
以下是一个示例代码:
for (;;) { // 循环体代码 if (condition) { break; } }
在上面的代码中,我们在循环体中添加了一个条件判断语句if (condition)
,如果满足条件,就会执行break
语句退出循环。
通过在无限循环中添加条件判断语句,我们可以控制循环的执行,避免出现无限循环的情况。这样可以确保程序的正常运行,并避免浪费计算资源。
在JavaScript中,for(;;){...}
创建了一个无限循环,几乎与以下形式完全相同:
while(true){ //... }
或者
do{ //... }while(true);
好的。那么这是for的“可接受”用法吗?还是while(true)
更清晰一些?
while(true)
可能会更容易被其他人注意到,并且可能更好地展示出你创建无限循环的目的。虽然我不确定是否存在任何性能方面的考虑(除了它会一直运行直到结束)。也许更好的做法是这样:var tester = true; while(tester) { /* ... */ tester = false; }
,这样当你将tester设置为false时会退出循环(或者你可以使用break语句)。
我用Chrome分别运行了这两个循环1000000次,for(;;)
稍微快了一点,大约快了1%。
我使用了一个简单的基准函数:stackoverflow.com/questions/1003855/…
for循环和while循环的语法继承自C语言。很长一段时间,C语言没有内置的布尔类型,所以for(;;)
的替代品是while(1)
。这两种写法都是可接受的C语言习惯用法,但并非所有C语言环境都接受。当while(true)
可用时,从可读性和概念清晰性的角度来看,它似乎更可取。担心性能是一种过早优化的严重情况;它将取决于实现,这在不同的浏览器甚至浏览器版本之间会有所不同。