【问题标题】:Do infinite loops of JavaScript crash the browsers these days?这些天,JavaScript 的无限循环是否会使浏览器崩溃?
【发布时间】:2013-01-07 11:01:13
【问题描述】:

我正在学习 JavaScript,在编程方面还是个新手,碰巧遇到了这些无限循环,据说这些循环会永远持续下去并导致浏览器崩溃,但是当我用这些代码创建一个时:

i=0;
while (i<10) {document.write(i);}

浏览器只是继续加载它,从来没有,但浏览器没有崩溃?
那么现在的浏览器是否强大到足以承受无限循环,还是我需要一个不同的无限循环?

【问题讨论】:

  • 您可以尝试一个无限循环,将信息添加到数组中。
  • 您是否收到任何 javascript 错误?
  • “承受无限循环”——“无限循环”和“连续处理”是有区别的。我假设你对后者感兴趣。在这种情况下,搜索 setTimeout 函数并查看如何将工作划分为正确的块

标签: javascript infinite-loop


【解决方案1】:

是的,无限循环仍然会导致浏览器崩溃(或者只是运行 JS 的选项卡)。 但是,大​​多数现代浏览器都可以检测脚本是否挂起/运行无限循环,并为您提供中止脚本的选项。

另外,创建无限循环的更有效方法是:

while(true);

【讨论】:

  • 这是我永远无法理解的关于 JS 的一件事:为什么无限循环会冻结整个页面而不是... 运行,就像其他环境/语言一样无限循环是公平游戏的存在。我真的不明白为什么解释器不能只坐在一个单独的线程中,而渲染器侦听对 DOM 的更改并以先到先得的方式应用它们。我可以理解阻止 future scripts 执行,但不能理解 renderer
  • 因为使用的模型(在万维网联盟中定义)默认是单线程的,点击一个DOM节点可以触发一个函数,需要在现在执行的内容之后执行可以预见的是,“之后”永远不会出现无限循环。 Web workers 和 timeInterval 可以用来克服一些限制
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多