如何停止Javascript中的无限循环?

如何停止Javascript中的无限循环?,javascript,Javascript,比如说我无意中写下了这样的话: do { } while (true); …然后运行它。除了关闭浏览器外,还有什么方法可以停止javascript执行(相当于Ctrl+Break-in-basic或Ctrl+C) 通常,大约30秒后,浏览器会询问您是否要停止长时间运行的脚本,但这并不总是发生(正如我刚刚发现的) 仅供参考:这样的简单循环:for(i=1;i>0;++i)将导致我的浏览器崩溃(Firefox 3.5b4)。我不想测试它是否是我的附加组件。持续重启我的浏览器并不是我想的有趣的周一

比如说我无意中写下了这样的话:

 do { } while (true);
…然后运行它。除了关闭浏览器外,还有什么方法可以停止javascript执行(相当于Ctrl+Break-in-basic或Ctrl+C)

通常,大约30秒后,浏览器会询问您是否要停止长时间运行的脚本,但这并不总是发生(正如我刚刚发现的)


仅供参考:这样的简单循环:
for(i=1;i>0;++i)将导致我的浏览器崩溃(Firefox 3.5b4)。我不想测试它是否是我的附加组件。持续重启我的浏览器并不是我想的有趣的周一晚上。

取决于浏览器。有些脚本允许您单击“停止”按钮来停止javascript执行。其他人则不然


我建议最好的方法是完全关闭浏览器或选项卡

至少使用Chrome,您可以关闭单个选项卡,而不是整个应用程序


他还告诉我IE8也有类似的功能。

大多数浏览器都有一个“脚本性能缓慢”警告,当失控的javascript需要很长时间才能执行时会出现该警告。此警告对话框通常提供终止违规脚本的选项。

大多数体面的浏览器都会显示“无响应脚本”警告。。。如果没有,我想你最好的办法是找出警告没有出现的原因。

ref:
Firefox尤其有问题

警告!警告!不要运行这个

javascript:
    while (true) alert("irritated and exhausted - yet?");
这将变为“无限”,并且不会耗尽内部超时,因为脚本占用CPU时间的速度不够快。在FF 11中,这保证不会有“无反应脚本”堕胎机会

在早期的浏览器版本中,使用手动干预,在不发出嘎嘎声和中止整个浏览器的情况下,优雅地停止有问题的脚本是可能的,也是微不足道的。没有这种控制是浏览器软件设计的一个主要缺陷。需要不合理的灵活性和反射来影响参考文献中描述的“解决方案”的手动运动力学

警告:脚本可能在没有超时和警告类型提示的情况下进入“无限”状态。这些都是特别有害和恼人的。基本上,脚本运行速度足够慢,因此CPU时间周期分配为20秒。在超时之前,通过暂停执行等待事件触发器的恢复而延长数分钟或数小时或。与其对CPU周期进行计时,不如让脚本在现实世界中计时时超时。(有没有注意到你无法中止试图检索内容但未成功的脚本来构建页面?在FF中,地址栏按钮
reload
cancel/stop
都被禁用,尽管选项卡至少可以关闭。)普通javascript
Timeout()
setInterval()
呼叫不受此影响,并且经过调节,因此在挂起时,手动干预可以“优雅地”中止呼叫

经验观察的测试环境:

window.navigator.userAgent=
Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:11.0) Gecko/20100101 Firefox/11.0
附言:剧本

for (i=1; i > 0; ++i);
i
超过允许的最大值时,将最终捕获溢出错误。

从,通过:

这不是一个令人满意的通用解决方案,但使用Greasmonkey(或者Ubiquity或Jetpack),您可以使用调用window.confirm的函数覆盖window.alert,并可以选择抛出错误、停止所有脚本执行或切换标志以停止警报。如果您不断返回的站点呈现这种行为,这可能会很有用


当我使用Chrome时,我会按shift+ctrl+esc打开windows任务管理器。然后切换到进程选项卡,滚动浏览chrome.exe进程(chrome的每个打开的选项卡都有一个进程),直到我发现其中一个进程的cpu使用率明显高于oters。对我来说,它往往有30%左右,而其他所有人都有0-2%左右 那我就结束这个过程。
实际上,也可以通过在chrome中转到工具>任务管理器或shift+esc打开其进程的自定义任务管理器来实现。可能更容易使用,因为它显示了选项卡的更多信息。

我使用的是Chome版本45.0.2454.101


在右上角的汉堡包菜单上,单击更多工具>任务管理器,然后从那里取消选项卡。如果尝试关闭选项卡失败,则会出现这种情况。否则,标签上的一个简单的“X”将杀死它。

如果您使用的是Chrome,您可以很容易地杀死不响应标签

当您看到发生无限JavaScript循环时,请执行以下步骤:

1.如果您已经打开了另一个选项卡,请转到该选项卡或打开 新的

2.按“Shift+Esc”打开Chrome的任务管理器

3.在列表中找到您的选项卡(应该是列表中内存消耗最多的选项卡),然后单击“结束进程”按钮


导航到另一个选项卡很重要,因为JavaScript会捕捉到您的按键,而不会对其执行任何操作,因为它有无限循环。

2018更新:

在Chrome 67中,如果您打开了DevTools(F12),则可以结束无限循环,而无需关闭整个选项卡:

  • 转到面板并单击“暂停脚本执行”
  • 按住相同的按钮,现在选择“停止”图标

在Firefox中 转到开发人员工具调试器,然后单击暂停按钮

含铬 转到开发者工具
,然后单击暂停按钮


出于好奇,你能确定是什么原因导致你的浏览器没有抛出“慢脚本”警告吗?没有线索!(这15个字符的限制很烦人)这属于超级用户吗?@Chetan:这几乎完全与编程有关……哦,我误解了这是一个关于浏览器使用的问题,而不是关于插件开发的问题。我的错-1个多余的。OP:“通常,大约30秒后