for循环settimeout,For循环语句
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值。