Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript while循环必须是无限的才能崩溃吗?_Javascript_Loops_Browser - Fatal编程技术网

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

Javascript while循环必须是无限的才能崩溃吗?,javascript,loops,browser,Javascript,Loops,Browser,还有其他原因吗?如果它们太长怎么办?如果是这样,那么多长时间太长,会不会导致浏览器崩溃 长循环崩溃问题是否可以通过setTimout0循环来解决,这样代码就会在下一个滴答声中执行,如果是这样,是否也可以以这种方式无限循环而从不崩溃 我不是在写这么愚蠢的东西,我只是一直在想 我原以为每个浏览器上的Chrome都不一样,所以为了回答这个问题,让我们假设它是一款相当知名和常用的浏览器——Chrome 编辑:提到了垃圾收集器和未被销毁的对象,有人举过这样的例子吗?如果您有这样一个循环: while(tr

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

长循环崩溃问题是否可以通过
setTimout
0循环来解决,这样代码就会在下一个滴答声中执行,如果是这样,是否也可以以这种方式无限循环而从不崩溃

我不是在写这么愚蠢的东西,我只是一直在想

我原以为每个浏览器上的Chrome都不一样,所以为了回答这个问题,让我们假设它是一款相当知名和常用的浏览器——Chrome


编辑:提到了垃圾收集器和未被销毁的对象,有人举过这样的例子吗?

如果您有这样一个循环:

while(true)
{
  i = 1;
}
什么也不会发生,只有CPU会变热,浏览器会在某个时候要求停止脚本:D

如果您有一个循环或一个有一些输出的循环,那么RAM不在ININIT中

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


超时是协同执行多任务

时间本身不是一个约束,而是您在循环中所做的事情。例如,如果在循环中创建了许多没有被垃圾收集器破坏的对象,那么最终将耗尽内存并使脚本崩溃

例如:

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

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

相关:另外,关于“太长”与“无限”,程序如何区分在宇宙热死后某个时间终止的循环与?您可以始终运行脚本(只要循环不消耗内存),但每个现代浏览器最终都会为用户提供提前终止脚本的选项。这是安全循环的示例吗,或者一个没有垃圾回收的循环?这是一个在一段时间后会崩溃的例子,因为
a
对象将增长到一个巨大的大小。你可以展示一个循环中许多对象没有被垃圾回收器破坏的例子吗?只需将
a.push(a)
替换为
a.push({})
。这会在一分钟左右的时间内使我的Chrome崩溃。