window.idarr = [0];
function _setInterval(fun, time) {
var id = setTimeout(function() {
_setInterval(fun, time);
fun();
clearTimeout(id);
}, time);
window.idarr.pop();
window.idarr.push(id);
return window.idarr;
}
function _clearInterval(id) {
clearTimeout(id[0]);
}
因为 setInterval 是setTimeout 实现,所以 clearInterval 也要用 clearTimeout 实现。但是 setInetrval 应该返回的是一个数字,这里就有点为难了,因为它必须返回的是正在执行的 setTimeout 函数的计时器编码,没办法。我只能用数组去存储这个 id,因为 return window.idarr
返回的是内存地址,直接操作 idarr 数组,自然就可以接收当前的计时器编码。不知道有啥其他的好法子。
还有一个问题想不明白,为啥编码没有 “2” 呢?
window.idarr = [];
function _setInterval(fun, time) {
var id = setTimeout(function() {
_setInterval(fun, time);
fun();
clearTimeout(id);
}, time);
window.idarr.push(id);
return window.idarr;
}
function _clearInterval(id) {
clearTimeout(id.slice(-1)[0]);
}
var count = 0;
var timerId = _setInterval(function() {
count++;
console.log(timerId);
if(count==10){
_clearInterval(timerId);
}
}, 1000);
执行结果:
为啥没有 ”2“ 呢?