【问题标题】:Trying a infinite loop on JavaScript在 JavaScript 上尝试无限循环
【发布时间】:2013-09-23 14:27:56
【问题描述】:

我正在尝试做一个无限循环,但它只有在我包含“警报”时才有效。我的代码如下所示:

while( tocontinue ){
  // Some code
  alert('Accept to continue');
}

这样,用户必须单击以隐藏警报(例如,在 Chrome 上),然后循环自行正确继续。我需要在没有任何警报的情况下实现这一点。我也试过这个:

while( tocontinue ){
  // Some code
  tocontinue = false;
  setTimeout(function(){tocontinue=true},500);
}

还有“window.setTimeout”,没有“function(){}”这个词,但它不起作用。我尝试了一切:在 JavaScript 上实现了 sleep() 函数的一些实现,每次 X 使用 setInterval 调用该函数,在 this post... 上回答 1 和 3...:/

非常感谢您的宝贵时间。

【问题讨论】:

  • 你想做什么?您可以通过while (true) 实现无限循环
  • 异步任务,如定时器,在执行线程空闲之前无法完成,while (true) 永远不会让它空闲。
  • 我怀疑第一个示例是否有效。 continue 已保留。
  • @RoyMiloh 我认为continue 这实际上是 OP 正在使用的布尔变量的名称。虽然我不认为这是可能的..
  • continue,请勿将其用作变量名。

标签: javascript infinite-loop


【解决方案1】:

我正在尝试实现一种遗传算法,并且我想在我决定时停止它(使用一个将全局变量“tocontinue”设置为 false 的按钮)。同时,我想要一个无限循环。

好吧,您将无法将真正的无限循环与用户交互结合起来,因为它们都依赖于能够专门处理它们的同一个线程。但是,您可以接近瞬间。

var interval = setInterval(function () {
    // some code
}, 10);

可能为每一轮将几个迭代组合在一起:

var interval = setInterval(function () {
    var limit = 5;
    while (limit--) {
        // some code
    }
}, 10);

但是,该间隔将使迭代尽可能快地进行,同时仍为用户交互提供一些空闲时间,例如单击特定按钮到clear the interval

document.getElementById('stopButton').addEventListener('click', function () {
    clearInterval(interval);
}, false);

示例:http://jsfiddle.net/coiscir/xZBTF/

【讨论】:

  • 非常感谢乔纳森!当您不确定时,有很多选择...我尝试了 setTimeout 有和没有“function()”字样,但没有使用 setInterval。对不起,我的经验不足...您的解决方案非常优雅,而且效果很好。
【解决方案2】:

setInterval() 在这里可能更有用。

function updateLoop() {
   //All the code goes here 
}

setInterval(updateLoop,500);

【讨论】:

  • 这个解决方案对我不起作用,不管有没有括号:(我说我已经试过了。
  • 好吧,如果没有看到源代码,我不确定我还能做什么。
  • 是的,我将 while 的内容放在一个名为“updateLoop”的新函数中,并从一个 setInterval 函数中调用它,正如 Daniel 建议的那样。
【解决方案3】:
var reader = new XMLHttpRequest() || new ActiveXObject('MSXML2.XMLHTTP');

function loadFile() {

    reader.open('get', 'ccc.txt', true); 
    reader.onreadystatechange = displayContents;
    reader.send(null);
}

function displayContents() {

if(reader.readyState==4) {

var el = document.getElementById('main');

el.innerHTML = reader.responseText;

var data =  el.innerHTML;


 }

   }

【讨论】:

    【解决方案4】:
    for(var I = 7; I >1; i+=3);
    console.log(i)
    

    【讨论】:

      猜你喜欢
      • 2016-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多