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 并同样工作)
还有其他原因吗?如果它们太长怎么办?这会导致浏览器崩溃吗?如果是,多长时间算太长?
是否可以通过 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 并同样工作)