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:-)