我正在为工作中的项目调试另一个开发人员的Javascript。
在一个美好的一天,我可能是一名中级Javascript开发人员,而且我遇到了一个看起来很糟糕的for循环:
for(i = 0; ; i++)
任何人都可以告诉我这是否确实是一个错误,或者在某些情况下,这是一个完全有效的方法来做高级的事情吗?
答案 0 :(得分:4)
没关系,完全合法。 for
语句中的三个槽中的任何一个都可以留空。除了我添加的条件,它在逻辑上与此相同:
i = 0;
while (true) {
// other code here
if (some condition) {
break;
}
i++;
}
它将是一个无限循环,除非循环中的某个地方在某些条件下发出break
语句以停止循环(我在代码示例中添加了一个示例测试)。
答案 1 :(得分:3)
这是有效的。 for循环for(expr1; expr2; expr3)
中的三个表达式中的每一个都可以为空。例如,for( ; ; )
与while(true)
相同。
expr1
是一个在循环开始之前执行一次的表达式。您也可以在此处使用变量声明语句,而不是代码中的表达式
expr2
是在循环的每次迭代之前执行的表达式,如果表达式的值为falsy,则循环完成。如果省略表达式,则认为它是真实的
expr3
是一个在循环的每次迭代后立即执行的表达式。
您拥有的语句本质上是一个while(true)
循环(其中应包含break
语句,它使用变量i
计算迭代次数。
答案 2 :(得分:1)
只要在循环内部有一个break
语句就可以了。
如果没有break语句,JavaScript运行时将继续在循环中执行代码,一遍又一遍,“i”不断增长,不断增长。很快,“我”将变成一个比任何东西都大的数字;比你在学校里认识的有钱的孩子甚至在他的游戏室中拥有的乐高积木还要多。它将超过世界上的蚂蚁数量,然后是星巴克的数量,然后是海洋中水分子的数量。在某些时候,浏览器可能会询问您是否希望它停止脚本,但如果您感到好奇,如果您是那种喜欢探索未知的人,那么您将拒绝该提议并让它继续下去。不久,“i”的价值将达到真正的天文价值,事情将变得有趣。还记得,当这个家伙被吸入木星或其他什么东西时,2001 A Space Odyssey
事情变得如此奇怪吗?那可能就是这样。
尝试一下jsfiddle。
答案 3 :(得分:1)
使用递增计数器进行无限循环是一种有效的方法。无论是有意还是无意,这都是另一回事,这就是为什么我个人反对在奇怪的情况下使用for循环。评论显然会解决这种用法的任何问题,但
答案 4 :(得分:0)
循环有一个简单的语法:
因为JavaScript 无效返回true (如果我错了,请更正我),然后循环入口检查始终为真。
这根本不是一个好习惯。因此,我坚信这是一个破碎的代码。我没有看到过设计无限循环的例子。