for循环中的JavaScript setTimeout

use*_*460 2 javascript for-loop repeat settimeout hypertalk

我之前已经看到这个问题已被提出过,但我不确定能解决我的问题.

我有以下代码:

function mouseup (  )
{
    for( i = 0; i < 6; i++ )
    {
        setTimeout(function(){
            alert( "test" );
        },1000);
    } 
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行代码时,暂停一秒后,对话框出现(应该如此),但是当我在该对话框上单击"确定"时,第二个立即出现,没有任何延迟.

jsFiddle例子

有没有一种简单的方法可以解决这个问题,而无需更改太多的代码?我问的原因是因为我正在构建一个更改代码的转换器,例如:

repeat 6 times
    wait for 1 second
    answer "test"
end repeat
Run Code Online (Sandbox Code Playgroud)

进入上面的JavaScript代码,如果我没有,也不想改变我的转换程序太多.

提前谢谢了.

编辑:(如果您想知道,非JavaScript代码是HyperTalk/xTalk代码)

blu*_*lue 8

window.counter = 6;
function mouseup (  )
{
    setTimeout(function(){
        alert( "test" );
        if ( window.counter-- ) {
            mouseup (  );
        }
    },1000);
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*and 6

用for循环你无法达到你想要的效果.在继续之前,for循环不会等待超时.要做你想做的事情,你需要将你的超时链接在一起,以便结束一个超时开始下一个超时:

var i = 0;
function TimeoutFired() {
    i++;
    alert( "test" );
    if (i < 6) {
        setTimeout(TimeoutFired, 1000);
    }
}
setTimeout(TimeoutFired, 1000);
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/M98ZL/

  • 我更喜欢这个答案获得投票的另一个答案,因为它使用了一个本地范围的变量,而不是将一个具有非常常见名称的属性附加到`window`,在那里它很容易被意外覆盖. (2认同)