【问题标题】:How can one protect against while(true) loops in javascript?如何防止 javascript 中的 while(true) 循环?
【发布时间】:2014-04-24 23:15:24
【问题描述】:

我一直致力于结合在线和自制环境教孩子们使用 Javascript 编程。

在某些阶段,大多数孩子都会遇到创建无限循环的时候。在过去的日子里。一个无限循环应该是孩子的第一个程序

10 PRINT "Mike is cool"
20 GOTO 10

用 JavaScript 写这样的东西是有问题的

while(true) {
   print("Mike is cool");
}

由于 JavaScript 的同步特性,它不起作用,这是他们必须学习的东西。问题不在于他们的程序没有按预期运行,而是当他们运行他们的程序时整个世界都停止了!

有些浏览器有足够的控制权来关闭窗口,有些只是锁定。如果您使用的是浏览器内环境(如 jsfiddle、jsbin 等),则您没有足够的控制权来阻止流氓“任务”

您无法事先审核代码(实际上停机问题),但有什么合理的方法可以减轻症状吗?

可汗学院的编程环境似乎可以做到这一点

http://www.khanacademy.org/cs/breaking/4804951998988288

如何处理过多的运行时间?在 while 仍在运行时如何做到这一点?

【问题讨论】:

  • 你可以通过setInterval()运行它
  • 我相信可汗学院和 Codecademy 等网站在服务器上运行他们的代码,而不是在本地,他们有更多的控制和监控能力,而不是在用户的浏览器中运行代码。跨度>
  • 也许您可以使用命令行 JavaScript 解释器(例如 Node.js 中的 V8)涵盖基础知识(包括这种情况)。让他们在记事本(或适当的编辑器)中创建一个脚本,然后使用node script.js 运行它。如果他们创建了一个无限循环,CTRL-C 退出它。不像那些在线工具那样华而不实,但也不错。
  • 也有网络工作者,但他们可能会产生比他们要解决的问题更多的问题。
  • 什么“由于 JavaScript 的同步特性而无法工作”?

标签: javascript while-loop


【解决方案1】:

您可以在浏览器中使用 Web Worker 来完成此操作,它不会锁定 Web 浏览器的 UI 线程,因为浏览器会为 Web Worker 运行一个单独的线程。您的示例循环代码将在网络工作者中运行。

Web 工作线程是 HTML5 功能,因此这种方法不适用于旧版浏览器。你可以设置断点和调试网络工作者,至少在 Chrome 和 Safari 中是这样。您可以在以下位置了解 Web Worker 线程的基础知识:

http://www.html5rocks.com/en/tutorials/workers/basics/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-07
    • 2012-10-18
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2020-03-23
    • 1970-01-01
    相关资源
    最近更新 更多