setTimeout模拟setInterval
核心:采用闭包,返回了清除函数
function mySetInterval(fn, time) {
let timer = null;
let isClear = false;
function interVal() {
if (isClear) {
isClear = false;
clearTimeout(timer);
return;
}
fn();
timer = setTimeout(interVal, time);
}
timer = setTimeout(interVal, time);
// 返回清除函数
return () => {
isClear = true;
};
}
// 测试一下
let cancel = mySetInterval(() => {
console.log(111);
console.log(timer);
}, 1000);
// cancel() // 停止执行