(JavaScript) 为啥 while 循环中的“if”中的 continue 语句会使浏览器崩溃?
Posted
技术标签:
【中文标题】(JavaScript) 为啥 while 循环中的“if”中的 continue 语句会使浏览器崩溃?【英文标题】:(JavaScript) Why does a continue statement inside 'if' in a while loop crash the browser?(JavaScript) 为什么 while 循环中的“if”中的 continue 语句会使浏览器崩溃? 【发布时间】:2021-05-18 02:55:27 【问题描述】:我想用 javascript 编写一个程序来打印除 5 和 10 之外的从 1 到 20 的所有数字。当我使用这样的 for 循环时:
for (x = 1; x <= 20; x++)
if (x == 5 || x == 10)
continue;
document.write(x + ' ');
它可以正常工作并打印1 2 3 4 6 7 8 9 11 12 13 14 15 16 17 18 19 20
。
但是,当我尝试使用这样的 while 循环时:
var x = 1;
while (x <= 20)
if (x == 5 || x == 10)
continue;
document.write(x + ' ');
x++;
它使网页无响应,并提示我关闭它。这里有什么问题?
【问题讨论】:
【参考方案1】:问题如下,在 for-loop 内 continue 会跳回到更新表达式 x++ 但在 while 循环中它会跳回到运行状态while(x
引用mdn docs。
在一个while循环中,它跳回到条件。在 for 循环中,它 跳转到更新表达式。
因为您没有更新条件内的计数器
while (x <= 20)
if (x == 5 || x == 10)
continue;
x 将保持 5 并且永远不会更新,因为在 while 循环中继续它会跳回 运行条件。这将进入一个无限循环。
要解决这个问题,您可以在 while-loop
中的 continue 语句之前增加计数器while (x <= 20)
if (x == 5 || x == 10)
x++
continue;
// for (x = 1; x <= 20; x++)
// if (x == 5 || x == 10)
// continue;
//
// document.write(x + ' ');
//
var x = 1;
while (x <= 20)
if (x == 5 || x == 10)
x++
continue;
document.write(x + ' ');
x++;
【讨论】:
【参考方案2】:在第一种情况下,循环声明 for (x = 1; x <= 20; x++)
处理迭代之间递增的 x
,因此每次循环体执行时,您都会得到不同的 x
值。
在第二种情况下,x++
仅在x
既不是5
也不是10
时执行。因此,当x
到达5
时,循环将永远与x = 5
一起执行,因为没有任何改变。
【讨论】:
以上是关于(JavaScript) 为啥 while 循环中的“if”中的 continue 语句会使浏览器崩溃?的主要内容,如果未能解决你的问题,请参考以下文章
(JavaScript) 为啥 while 循环中的“if”中的 continue 语句会使浏览器崩溃?
为啥在 Javascript 中不鼓励在 while 语句中赋值?