【问题标题】:how do an infinite loop in javascript如何在javascript中进行无限循环
【发布时间】:2017-10-10 20:50:48
【问题描述】:

我试图在 0 到 100 和 100 到 0 之间使用 while 进行无限循环,但是浏览器崩溃了。有没有办法清除浏览器内存?这是我的代码:

var a = 0;
var flag = true;

while (true) {

    if (a < 100 && flag == true) {

        a++;

    } else {

        a = 0;
        flag = false;

        if (a < 0) {
            flag = true;
        }

    }

    console.log(a);

}

【问题讨论】:

  • 好吧,你总能预料到浏览器会出现无限循环崩溃
  • 恕我直言,该代码没有多大意义。你有一个从不使用的标志,一个从 0 到 99,然后从 0 到 99,然后从 0 到 99 的变量,以及永远不会满足的条件 (if (a &lt; 0))。
  • 您不想使用flag 作为while 循环的条件吗?喜欢while (flag) {(...)}?然后循环实际上会在某个时候退出并且不应该崩溃任何东西。
  • 如果你的目标是从 0 到 100 再回到 0,你需要跟踪你要去的方向,例如:@987654326 @ 这不会是无限的,不会使浏览器崩溃,并且确实会在所需的旅程中使用 a
  • 您实际上想通过无限循环来完成什么?也许我们可以提出一些不会让浏览器崩溃的建议。

标签: javascript while-loop infinite-loop


【解决方案1】:

无限的while循环会阻塞主线程,这相当于崩溃。 您可以使用自调用函数(让主线程在其间做一些其他事情):

(function main(counter){
    console.log(counter);
    setTimeout(main,0,counter+1);
})(0);

您可以将一个从 0 到 100 的循环和一个从 100 到 0 的循环放入其中,而不会过多地阻塞浏览器:

(function main(){
    for(var counter=0;counter<100;counter++){
       console.log(counter);
    }
   console.log(100);
    while(counter){
       console.log(--counter);
    }
    setTimeout(main,0);
})();

http://jsbin.com/vusibanuki/edit?console

进一步研究:JS IIFEs函数表达式非阻塞槽setTimeout ...

【讨论】:

    【解决方案2】:

    有没有办法清除浏览器内存?

    是的。几乎所有浏览器都有一个小图标,看起来与此非常相似:

    这称为“刷新”。如果你使用它,它将“清除浏览器内存”。

    【讨论】:

      【解决方案3】:

      你只需要一个无限循环?如果是这样就这样做

      for(var i = 0; i < 1;){
        console.log('infinite');
      };
      

      如果你需要一段时间

      var = 0;
      while(var < 1){
        console.log('looOOoOOoOoOp');
      };
      

      【讨论】:

      • 我也总是需要客户网站的无限循环。
      • @FelixKling 据我所知没有。这很简单。这是直截了当的。它的作用和作者的意图是清晰而明显的。我在很长一分钟内见过的最好的死循环。
      • @FelixKling 什么都没有,但为什么要声明 2 个变量以在循环中使用? while(true) 没什么问题,只是方式不同而已。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-20
      相关资源
      最近更新 更多