javascript for循环里面的settimeout执行问题
<script>functiontestAnonymous(){varaa=0;varbb=1;for(vari=0;i<3;i++){aa++;bb++;setTime...
<script>
function testAnonymous() {
var aa = 0;
var bb = 1;
for(var i = 0; i < 3; i++) {
aa++;
bb++;
setTimeout('alert('+aa+')',1000);
//setTimeout(function(){return testDisplay(aa,bb);},1000);
}
}
testAnonymous()
</script>
问:为什么先出1、再出3、再出2?
为什么不是1、2、3? 展开
function testAnonymous() {
var aa = 0;
var bb = 1;
for(var i = 0; i < 3; i++) {
aa++;
bb++;
setTimeout('alert('+aa+')',1000);
//setTimeout(function(){return testDisplay(aa,bb);},1000);
}
}
testAnonymous()
</script>
问:为什么先出1、再出3、再出2?
为什么不是1、2、3? 展开
展开全部
循环是在瞬间完成的,也就是在瞬间启动三个计时器(时间间隔不会超过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>
追问
你好,这2天我看了setimeout的机制
我想问个另外的情况
如果我把alert 换成console.log的话输出就不会出现1、3、2的情况,这个是什么原因呢
setTimeout(console.log(aa),1000);
追答
alert()会暂停后面的代码,差别也许在这里吧
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询