在Chrome和Firefox中,在控制台中按Ctrl + C相当于什么?在实现各种算法时,我经常在Javascript中编写一些错误的(while
)循环,它不会退出,会使浏览器冻结。重新加载不起作用,单击小X关闭选项卡不会做任何事情,并且在一段时间内(字面意思)我不在记忆中,系统正在交换,我要离开去喝咖啡休息时间。
答案 0 :(得分:6)
在Chrome中,您可以点击Shift+ESC
(或右键单击标题栏并打开Chrome任务管理器)并终止与挂起标签相关联的进程。这将适用于关闭选项卡的情况。
需要注意的是,Chrome有时会将多个标签简化为一个过程,这会终止与该过程相关的所有标签。
您可以采取的另一种避免while
循环挂起浏览器的方法是编写这样的代码(您可以在测试后将其取出):
var maxIterations = 100000;
while (foo) {
if (!maxIterations--) throw new Error('Max iterations hit, aborting.');
// do stuff
}
在Chrome的任务管理器中单击鼠标右键,然后选择上下文菜单底部的项目以显示奇怪的复活节彩蛋。
答案 1 :(得分:6)
JavaScript没有Ctrl + C
这样的东西。执行JavaScript的浏览器通常会保护自己。如果任何JavaScript挂起,他们会抛出一个对话框,询问用户是否要停止JavaScript。
通常可以在浏览器的设置中找到超时持续时间。您可以在此处找到如何为FireFox执行此操作:http://www.trixya.net/index.php/internet/how-to-set-javascript-timeout-in-firefox
答案 2 :(得分:1)
从我对你的工作方式的深刻见解,我将如何进行:
onload
js
代码中设置断点答案 3 :(得分:0)
在浏览器中运行Javascript代码没有真正的“中断”。 ECMAscript在所谓的“UI线程”中执行,这意味着所有渲染内容都发生在ECMAscript代码执行的同一队列中。
这反过来意味着,ECMAscript中的无限循环会自动挂起整个浏览器的交互。
避免这种情况的唯一方法是编写清晰,干净的代码。如果它发生了,大多数浏览器都会意识到UI线程忙得太久,并询问用户是否要取消正在运行的javascript进程。如果您不想等待,那么您唯一的选择是终止整个浏览器/标签流程。
但是,如果您知道脚本的某些部分可能导致无限循环,则可以在某种breakpoints
中手动设置developer tools
,或者可以插入debugger;
}关键字直接进入您的脚本。这导致javascript解释器在当前行停止并且您有机会分析下一个代码(例如条件)并且如果它看起来很糟糕则取消执行。