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