使用setTimeout实现setInterval功能
setInterval是指定时间间隔后重复执行指定回调,所以可以使用递归方式重复调用setTimeout,代码如下:
function intervalFn(fn, ms) {
function inner() {
fn();
setTimeout(inner, ms);
}
setTimeout(inner, ms); // 第二个setTimeout
}
intervalFn(fn, 1000);
function fn() {
console.log(666)
}
为什么不把第二个setTimeout直接使用inner()呢?
因为setInterval是间隔指定时间去执行指定回调,如果把第二个setTimeout改成inner()的话,在执行interValFn的时候根据js事件循环机制会立即执行inner函数,而不是将inner先放入任务队列里等待指定时间后再放入执行栈执行