我有以下代码:
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);
以上代码有效,但只提供一个警报然后停止。
然而,它可以正常工作(10个循环),并提供基本警报,例如alert("hi")
,并删除randomId行。
就好像这个函数中的任何复杂内容都会阻塞循环,它只会处理基本的警报..
感谢任何帮助,谢谢:)
答案 0 :(得分:3)
在你的setTimeout
中,你没有传递数组:
试试这个:
if( i < count ){
setTimeout(() => f(myArray), 3000 );
}
^创建一个lambda函数,以便您可以在超时时将值传递给回调。
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(myArray), 3000 );
}
}
f([1,2,3,4,5,6,7,8]);
&#13;