你如何通过内存在javascript中停止无限循环?

时间:2014-12-28 20:04:00

标签: javascript

我有一个编辑器,用户可以输入他们的javascript并显示他们的输出。但是我想要一个安全条件来阻止它们意外地创建一个无限循环。问题是我真的不想解析代码并寻找任何循环,然后添加额外的条件。我希望的是一个预先构建的函数,它可以在一定量的内存之后取消它,以避免浏览器崩溃。但我不确定如何做到这一点。

3 个答案:

答案 0 :(得分:3)

JS BIN运行一个名为loop-protect的开源项目,您可以使用它,它很容易实现。

Codepen has article on that

答案 1 :(得分:1)

在JavaScript本身中没有通用的方法,因为浏览器中的JavaScript是单线程的。*如果“敌对”脚本永远不会产生,那么你的代码将无法获得机会run - 杀死用户的脚本。

在某些情况下,运行时可以为您执行此操作 - Internet Explorer因its obnoxious error messages而臭名昭着,但我不了解任何与平台无关的方法来请求此类环境保护。


*忽略与讨论无关的网络工作者,因为消息处理无论如何都发生在主“线程”中。

答案 2 :(得分:0)

最干净的解决方案可能是解释JavaScript。这就是http://repl.it的工作方式((http://repl.it/help)。),当您执行无限循环时,反馈非常好。var f=function(){f();};f();会产生此输出:{{1 }}

JS-interpreter似乎是用Acorn JS解释JavaScript,你可能能够为无限循环添加检测:https://github.com/NeilFraser/JS-Interpreter

另一种选择是使用Web Workers(https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/basic_usage):