setTimeout没有在for循环中触发

时间:2013-12-19 11:44:23

标签: javascript settimeout

我有以下带有setTimeout函数的jquery代码将变量设置为false但它永远不会工作且变量始终保持为真

      for( var ff = 0; ; ff++)
      {
        if( dif == 0){
          break;
        }
        if (locked){
          // locked = false;
          setTimeout( function(){ locked = false; },2000);
        }
        else{
          LeftKeyPressed();
          locked = true ;
          setTimeout( function(){ locked = false; },3000);
          dif--;
        }
      }

任何人都可以帮助我们在将锁定变量设置为true两秒后将其设置为false。

这里是fiddle of this issue

1 个答案:

答案 0 :(得分:0)

Okey,因为他们的要求是我不知道你究竟想要什么,但这是我能做到的最接近的: http://jsfiddle.net/db6gJ/

它调用方法三次,并在锁定为false或true时进行更改以执行您想要执行的操作。此外,它不会阻止事件循环(具有无限循环),因此您的站点可以在timeOut调用正在运行时执行其他任务。

javascript代码也在这里:

var locked = true,
    timesMax = 3,
    timeCurrent = 0;

var inputLoop = function() {

    var delay = 2000;

    if(locked) {

        // Do something when locked is true
        console.log("locked is true!");

        locked = false;

    } else {

        // Do something when locked is false
        console.log("locked is false!");

        locked = true;
        delay = 3000;

    }

    timeCurrent++;

    // call again after delay, but call only 3 times
    if(timeCurrent < timesMax) {
        setTimeout(inputLoop, delay);
    }

};

// Launch it
inputLoop();

如果你查看你的javascript控制台(在chrome:右键单击 - &gt; inspect element - &gt;控制台),它应该打印:

locked is true!
locked is false! 
locked is true! 

另外需要注意的是:原始代码完成后会alert('out');,但说实话,代码会在其他地方继续执行,而您的“inputLoop”代码没有执行任何其他操作等待回调运行,它应该是这样的。

如果您不想知道上次调用的时间,您可以修改上一行之一:

// call again after delay, but call only 3 times
if(timeCurrent < timesMax) {
    setTimeout(inputLoop, delay);
} else { 
    // Last call in this method
    console.log('done!');
}