setTimeout和setInterval
本来这两个也没什么好说的 用法之类的自行看文档
这里说说用setTimeout模拟setInterval
为什么要模拟呢.用过setInterval的人可能会有这个需求
- 看原因
setInterval指定的是,“开始执行”之间的间隔,因此实际上,两次执行之间的间隔会小于setInterval指定的时间。假定setInterval指定,每100毫秒执行一次,每次执行需要5毫秒,那么第一次执行结束后95毫秒,第二次执行就会开始。如果某次执行耗时特别长,比如需要105毫秒,那么它结束后,下一次执行就会立即开始。
var i = 1; var timer = setInterval(function() { alert(i++); }, 2000);
上面代码每隔2000毫秒,就跳出一个alert对话框。如果用户一直不点击“确定”,整个浏览器就处于“堵塞”状态,后面的执行就一直无法触发,将会累积起来。举例来说,第一次跳出alert对话框后,用户过了6000毫秒才点击“确定”,那么第二次、第三次、第四次执行将累积起来,它们之间不会再有等待间隔。
- 为了确保两次执行之间有固定的间隔上面的代码可以改写成如下
var i = 1; var timer = setTimeout(function() { alert(i++); timer = setTimeout(arguments.callee, 2000); }, 2000)
最后
- 看用setTimeout模拟setInterval 代码
function interval(func, wait){ var interv = function(w){ return function(){ setTimeout(interv, w); func.call(null); } }(wait); setTimeout(interv, wait); } interval(function(){ console.log(2); },1000);
常常因为自己的无知而感到惶恐.
---Jun.