【问题标题】:How to break while loop outside it如何在它之外打破while循环
【发布时间】:2013-03-20 21:49:41
【问题描述】:

这不是一个常见的情况,但它的滥用是什么?

var t = true;

setTimeout(function(){
    t=false;
},1000);

while(t){
    //loop...
    //if t==false, break loop.
}

另一种情况,它也会导致无限循环:

button.onlcick = function(){
    t = false;
}

【问题讨论】:

  • 第一个版本不保证工作。由于不保证 javascript 计时器。但第二个应该工作。正如我以前的同行提到的那样,在纠正你的拼写之后你面临什么问题
  • 不常见,因为它会冻结浏览器。
  • @silentboy 他们不起作用,都冻结了浏览器。我想知道为什么当 window.t = false 时“while”没有中断?

标签: javascript while-loop


【解决方案1】:

JavaScript 是单线程的;当您使用 while (while (t) { ... }) 阻塞主事件循环时,不会调用 setTimeout 回调。

如果你在浏览器中运行你的代码,除了用其他方式编写你的代码之外,你真的无能为力;

您可以使用Promises Pattern,而不是阻塞主事件循环。

如果您在 node 之类的地方运行代码,则可以使用本机模块,从而能够创建线程(例如 threads_a_gogo。)

【讨论】:

    【解决方案2】:

    它不会工作,因为 javascript 不是多线程的 - 直到你当前的执行线程结束(只要你运行你的 while 循环它就不会),没有其他代码被执行(没有超时调用)和UI 被冻结(按钮点击不会响应)。

    可能可以使用 html5 中的新 Web Workers 功能来做类似的事情,但目前我无法确定。

    【讨论】:

      【解决方案3】:

      因为 while 循环永远不会退出,所以当某些事情同步完成时,您的其他代码永远不会运行。我对您最好的提议是不要使用 while 循环,而是使用诸如 setTimeout 之类的重复事件,并在完成时使超时自行运行。 这样您就不会创建一个封闭的环境。

      【讨论】:

        【解决方案4】:

        您可以使用带有中断条件的标签,例如 外部:同时() { //代码 如果() 打破外部; }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-09-18
          • 2020-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-05
          • 2020-05-31
          • 1970-01-01
          相关资源
          最近更新 更多