while 循环必须是无限的才会崩溃吗?

Do while loops have to be infinite to crash?

还有其他原因吗?如果它们太长怎么办?这会导致浏览器崩溃吗?如果是,多长时间算太长?

是否可以通过 setTimout 0 循环解决长循环崩溃问题,以便每个下一个滴答执行代码,如果是这种情况,是否也可以以这种方式无限循环而永不崩溃?

我不是在编写这种听起来很愚蠢的东西,我只是一直想知道。

我原以为它在每个浏览器上都不同,所以为了这个问题,我们假设它是一个相当知名和使用的浏览器 - Chrome。

编辑:垃圾收集器和未被销毁的对象已被提及,有人有这方面的例子吗?

如果你有这样的循环:

while(true)
{
  i = 1;
}

什么都不会发生,只有 CPU 会变热,浏览器会在某个时候要求停止脚本 :D

如果你有一个递归循环或一个带有一些输出的循环,那么 RAM 不是 invinit。

setTimout 可以节省您的资源并且不会阻止您的网站(因此浏览器不会要求您停止它)而且,如果它使用带有某些输出的 RAM,它会填满 RAM。

timeout 正在执行协作式多任务处理

时间本身不是约束,而是你在循环中所做的事情。例如,如果您在循环中创建许多未被垃圾收集器销毁的对象,您最终将 运行 内存不足并导致脚本崩溃。

示例:

var a = [];   
for (i = 0; i < Number.MAX_SAFE_INTEGER; i++) {
   a.push(a);
}

(好的,这是一个 for 循环,但可以重写为 while 并同样工作)