Javascript 使用setTimeout的JS-my循环停止循环

Javascript 使用setTimeout的JS-my循环停止循环,javascript,Javascript,我有以下代码: var i = 0, count = 10, randomId; function f(myArray) { // this will get a random value from myArray randomId = myArray[Math.floor( Math.random()*myArray.length )]; // displays the random value alert

我有以下代码:

var i = 0, count = 10, randomId;

    function f(myArray) {

          // this will get a random value from myArray
        randomId = myArray[Math.floor( Math.random()*myArray.length )]; 

          // displays the random value
        alert (randomId);


        i++;
        if( i < count ){
            setTimeout( f, 3000 );
        }
    }

    f(myArray);
var i=0,count=10,randomId;
函数f(myArray){
//这将从myArray中获得一个随机值
randomId=myArray[Math.floor(Math.random()*myArray.length)];
//显示随机值
警报(随机ID);
i++;
如果(i
上述代码可以工作,但只发出一个警报,然后停止

但是,它可以正常工作(10个循环),处理基本警报,如
警报(“hi”)
,并删除randomId行

就好像此函数中的任何复杂内容都会阻塞循环一样,它只会处理基本警报


感谢您的帮助:)

在您的
设置超时中,您没有通过阵列:

试试这个:

    if( i < count ){
        setTimeout(() => f(myArray), 3000 );
    }
if(if(myArray),3000);
}
^这将创建一个lambda函数,以便您可以在超时时向回调传递一个值

var i=0,count=10,randomId;
函数f(myArray){
//这将从myArray中获得一个随机值
randomId=myArray[Math.floor(Math.random()*myArray.length)];
//显示随机值
警报(随机ID);
i++;
如果(if(myArray),3000);
}
}

f([1,2,3,4,5,6,7,8])
设置超时中,您没有通过数组:

试试这个:

    if( i < count ){
        setTimeout(() => f(myArray), 3000 );
    }
if(if(myArray),3000);
}
^这将创建一个lambda函数,以便您可以在超时时向回调传递一个值

var i=0,count=10,randomId;
函数f(myArray){
//这将从myArray中获得一个随机值
randomId=myArray[Math.floor(Math.random()*myArray.length)];
//显示随机值
警报(随机ID);
i++;
如果(if(myArray),3000);
}
}

f([1,2,3,4,5,6,7,8])
您正在调用
f(myArray)
,但是
myArray
在哪里?递归调用不会将任何内容传递给
f
,因此它将是
未定义的
,从而在执行
myArray时产生错误。length
myArray是以前创建的。因此,第一个警报将正常工作,返回例如42,然后执行
setTimeout(f,3000,myArray)
Nvm现在我明白了,谢谢!。。。请注意,它在旧IE和旧Firefox中不起作用。要支持这些,您需要
setTimeout(function(){f(myArray)},3000)
您正在调用
f(myArray)
,但是
myArray
在哪里?递归调用不会将任何内容传递给
f
,因此它将是
未定义的
,从而在执行
myArray时产生错误。length
myArray是以前创建的。因此,第一个警报将正常工作,返回例如42,然后执行
setTimeout(f,3000,myArray)
Nvm现在我明白了,谢谢!。。。请注意,它在旧IE和旧Firefox中不起作用。要支持这些,您需要
setTimeout(function(){f(myArray)},3000)
这是可以的,但如果浏览器不支持ES6,它将失败。@ZohaibIjaz true。在这些浏览器中,您可以只使用
函数(){f(myArray);}
,或者使用transpiler:-)这是可以的,但如果浏览器不支持ES6,它将失败。@ZohaibIjaz true。在这些浏览器中,您只需使用
函数(){f(myArray);}
即可,或者使用transpiler:-)