for循环settimeout,For循环语句

http://www.itjxue.com  2023-01-04 15:34  来源:未知  点击次数: 

javascript for循环里面的settimeout执行问题

循环是在瞬间完成的,也就是在瞬间启动三个计时器(时间间隔不会超过1毫秒),就好像发令枪响,三个人同时起跑。Javascript的计时器无法精确到8毫秒以内(不记得哪里看到了,也许随着平台改进会有所提升,但别指望能区分1-2毫秒),因此三个alert同时执行可能出现先后。

这与你循环中直接调用alert不同。因为alert会暂停for循环,等关闭alert后执行下面代码。

最好设置不同时值,间距大于10毫秒。你试试这样写

script

function?testAnonymous()?{

???var?aa?=?0;

???var?bb?=?1;

???for(var?i?=?0;?i??3;?i++)?{

??????aa++;

??????bb++;

??????setTimeout('alert('+aa+')',1000+aa*10);

??????//setTimeout(function(){return?testDisplay(aa,bb);},1000);

????}

}

testAnonymous()

/script

关于 setTimeout的问题

FOR语句是所有程序设计语言中都比较特别。了解程序的人都知道,FOR语句能大大提高程序运行的效率。

针对JS而言,当FOR语句里存在setTimeout时,FOR语句是会忽略setTimeout执行的延缓时间的(FOR语句执行速度不是一般的快)。你FOR循环10次,开销时间根本不需要一秒。这个很难理象,不同浏览器对此执行方式也不相同,请参考天南写的DEMO:

script type="text/javascript"

for(var i=0;i10;i++){

setTimeout(function(){alert(i);},1000); //网页加载一段时间后,批量的弹窗(点一个弹一个),此代码在IE及标准浏览器下效果一样

}

/script

script type="text/javascript"

for(var i=0;i10;i++){

setTimeout(alert(i),5000); //此段代码就能会让人摸不着头脑了,在CHROME下,依次弹出0~9 ,但在IE6下只弹出一次0,然后就是脚本错误

}

/script

JS for循环时setTimeout 的问题

for语句不会因为有setTimeout的存在而停止,他会跳过setTimeout,setTimeout设定的是100毫秒的延迟,而for语句执行根本用不了那么长时间所以会先弹出九个alert,然后才setTimeout中的alert

可以使用递归来解决这个问题

var i=0;

function al()

{

i++;

if(i10) setTimeout(function(){alert("i="+i);al()},2000);

}

al();

for循环小于3为什么还会打印出3 for(var i =0;iconsole.log(i),1) }?

输出3是因为最后i的值为3。

for循环当中,最后还会执行一次i++,只是这次不会进入循环体内。

而i被声明后,在全局可以访问,而且setTimeout会延迟执行,执行的时候for循环已完成,所以你打印出来的值是全局的i值。

(责任编辑:IT教学网)

更多

推荐照片处理文章