还有其他原因吗?怎么样他们太长了?是否会导致浏览器崩溃,如果有的话会持续多长时间?
使用setTimout
0循环可以解决长循环崩溃问题,因此每下一个滴答都会执行代码,如果是这种情况,是否也可以以这种方式无限循环并且永不崩溃?< / p>
我没有编写这种愚蠢的声音,我一直都在想。
我认为每个浏览器都有所不同,所以为了问题,我们可以说它是一个相当知名的浏览器 - Chrome。
编辑:已经提到了垃圾收集器和未被销毁的对象,有人有这方面的例子吗?
答案 0 :(得分:1)
时间本身不是约束,而是你在循环中所做的事情。例如,如果在循环中创建了许多未被垃圾收集器销毁的对象,则最终会耗尽内存并使脚本崩溃。
示例:
var a = [];
for (i = 0; i < Number.MAX_SAFE_INTEGER; i++) {
a.push(a);
}
(好吧,这是一个for循环,但可以重写为while,并且工作方式相同)
答案 1 :(得分:0)
如果您有这样的循环:
while(true)
{
i = 1;
}
什么都不会发生,只有CPU会变热,浏览器会在某个时候要求停止脚本:D
如果你有一个带有一些输出的重复循环或一个循环,那么RAM不是invinit。
setTimout可以为您节省资金并且不会阻止您的网站(因此浏览器不会要求您停止它),而且,如果它使用带有一些输出的RAM,它将填满RAM。
超时正在进行合作多任务处理