setInterval()
简单用法:
var myVar = setInterval(show, 1000) //每1000ms执行一次show()
function show() {
console.log("a")
}
function stopShow() {
clearInterval(myVar)
}
stopShow() //停止循环
详细用法可以百度
for语句不会因为有setTimeout的存在而停止,他会跳过setTimeout,setTimeout设定的是100毫秒的延迟,而for语句执行根本用不了那么长时间所以会先弹出九个alert,然后才setTimeout中的alert 可以使用递归来解决这个问题 var i=0 function al() { i++ if(i<10) setTimeout(function(){alert("i="+i)al()},2000) } al()在js中,是没有睡眠这个概率的。
因为js语句是自上而下执行的,这样语句一触发,就会接着往小执行其他的代码,不会等着语句执行完毕。
所有,你这里需要的这个"睡眠",就算存在,那也只是延迟了for循环里面的代码的"执行",并不会延迟for本身的执行,我这里说的"延迟了for循环里面的代码的执行",是for循环内部的语句,一次性执行for所循环的次数次(这里可能有点难明白,比如for执行10次,延迟3秒,那for里面的代码会在延迟3秒后,一次性执行10次)。
如果要达到这个要求,就需要模拟"睡眠",使用定时器(setInterval)或者延时器(setTimeout):
//lst:需要循环的集合,timer:需要延迟的时间(单位:S)function for_Interva(lst,timer){
var index=0
var Intertimer=setInterval(function(){
//操作集合中第lst[index]个
//集合小标+1
index+=1
//判断index是否达到集合最后一个
if(index>=lst.length){
//如果达到了,就清除定时器,停止循环
clearInterval(Intertimer)
}
},timer)
}
function for_ITimeout(lst,timer){
var index=0
function timeoutfor(){
//操作集合中第lst[index]个
//集合小标+1
index+=1
//判断index是否达到集合最后一个
if(index<lst.length){
//没有达标,就继续循环。达标后,不会进入此if
Timeout(function(){
timeoutfor()
},timer)
}
}
Timeout(function(){
timeoutfor()
},timer)
}