死循环就是一段错误的阻止终止循环条件JavaScript代码。
无限循环是危险的,因为它会导致您运行代码的环境(浏览器或 NodeJS 服务器)崩溃或冻结您的计算机,导致它停止响应。
for
和while
语句是一个无限循环的常见原因,所以本教程将帮助您了解如何检测和修复所造成的语句无限循环。
让我们从修复for
语句中的无限循环开始。
在 for 语句中修复无限循环
一个for
语句可能会导致一个无限循环,当你错误的第二表达式把赋值运算符,而不是一个比较运营商(在条件表达式)
下面是一个for
会导致无限循环的语句示例。注意第二个表达式是如何i = 10
:
for (let i = 0; i = 10; i++) {
console.log("Infinite loop");
}
该for
语句要求第二个表达式的计算结果false
为终止循环。在上面的示例中,赋值运算符i = 10
被放置为条件表达式,而不是像i < 10
or之类的比较运算符i > 10
。
由于赋值运算符的计算结果始终为true
,因此该for
语句不会停止打印"Infinite loop"
到控制台,这可能会导致您的计算机死机。
要修复for
上面的语句,您需要将第二个表达式替换为该for
语句可以达到的内容。一个例子是使用比较运算符 ( =<
, <
, >
, >=
)
// the second expression is replaced with <
for (let i = 0; i < 10; i++) {
console.log("Infinite loop");
}
同样的错误还有另一个版本。这一次,第一个表达式和第二个表达式导致无限循环:
for (let i = 5; i > 0; i++) {
console.log("Infinite loop");
}
从上面的代码可以看出,只要变量i
大于,循环就会继续0
。
由于 的值i
已经大于0
初始化时的值,因此第二个表达式将始终计算为true
,从而导致无限循环。
为了修复上面的代码,第三个表达式必须减少i
而不是增加它的值:
for (let i = 5; i > 0; i--) {
console.log("Infinite loop");
}
另一个for
可能导致无限循环的语句示例是省略括号内的所有三个表达式,如下所示:
for (;;) {
console.log("Infinite loop");
}
但是上面的代码只能是故意写的,所以除非你想让你的电脑崩溃,否则你不应该在你的项目中使用它。
尽管for
您编写的语句肯定会比上面的示例更复杂,但您仍然可以使用相同的原则来查找和修复语句中的错误。
首先,您需要确保放在for
语句中的第二个表达式实际上可以计算为false
.
如果第二个表达式已经正确,则开始检查第一个和第三个表达式。第一个表达式是否初始化了一个true
在执行第二个表达式时始终计算为的值?
最后,第三个表达式是否正确递增或递减第一个表达式中初始化的变量的值?
总结一下:首先检查你的第二个表达式,然后按顺序检查第一个和第三个表达式。
接下来,让我们学习如何修复由while
语句引起的无限循环。
在 while 语句中修复无限循环
一个while
语句可以导致无限循环,当条件表达式括号始终计算里面放true
:
while (true) {
console.log("Infinite loop");
}
为了防止无限循环,while 语句的条件表达式必须能够计算为false
。
编写while
语句时最常见的错误之一是忘记修改用于条件表达式的变量的值。
请注意i
以下示例中 never的值如何更改:
let i = 0;
while (i < 6) {
console.log("Infinite loop");
}
您需要增加语句体i
内部的值,while
以便在false
执行循环时条件表达式的计算结果为:
let i = 0;
while (i < 6) {
console.log("Infinite loop");
i++;
}
无论您的while
语句多么复杂,您都需要确保括号内的条件表达式while()
可以计算为false
.
如果仍然找不到导致无限循环的原因,则可以使用该console.log()
语句打印条件表达式使用的变量的值:
let i = 0;
while (i < 6) {
console.log("Infinite loop");
i++;
console.log(i);
}
控制台日志可以帮助您查明错误的代码行并修复它。