javascript - js 异步的问题,settimeout的问题
本文介绍了javascript - js 异步的问题,settimeout的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
var i = 0, timer, j = 0;
while(i++ < 5) {
timer = window.setTimeout(function(){
j++;
alert(j);
}, 1000);
}
clearTimeout(timer);
输出的是1,2,3,4
5怎么没输出?还有为什么是这样输出的?他不是每次都赋值覆盖了吗?怎么还会执行?顺序是什么?clearTimeout这语句是在什么时候执行的
如果稍微改下
var i = 0, timer, j = 0;
while(i++ < 5) {
timer = window.setTimeout(function(){
j++;
alert(j);
}, i*1000);
}
clearTimeout(timer);
这样就是每隔一秒输出嘛,如果上面的问题解决了,那么没毛病
再继续改
var i = 0, timer, j = 0;
while(i++ < 5) {
timer = window.setTimeout(function(){
j++;
alert(j);
}, j*1000);
}
clearTimeout(timer);
这个时候,他是同时输出的,为什么跟上面用i的不一样?
谢谢各位的回答哈。
解决方案
首先,循环体内创建了5个定时器,每个定时器有各自的ID,ID在调用setTimeout
时被返回,是一个数值。
其次,timer
只是保存定时器的ID,并不会修改定时器的ID,所以当循环结束时,timer
只是保存了最后一个定时器的ID。赋值覆盖的是什么应该清楚了吧。
定时器里的函数是在clearTimeout
执行完后开始执行的。所以最后一个定时器被清除。其它定时器照常执行。
最后那个,while
执行的时候setTimeout
里的函数并没有被调用,因此j++
并没有执行,所以在循环体内j
一直是0
。
注:匿名函数只是作为一个参数被传入setTimeout
函数中。
这篇关于javascript - js 异步的问题,settimeout的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文