setTimeout模拟setInterval 使用闭包 以及终止的写法
function mySetInterval(fn, t){ let timer = null; function interval(){ fn(); timer = setTimeout(interval, t) } interval(); return { clear: ()=>{ clearTimeout(timer) } } } let a = mySetInterval(()=>{ console.log('xxx') },1000) //调用,该行后会自动调用开始执行 a.clear(); //终止运行
朋友字节前端面试碰到过的一个题目,网络上其他的许多都是使用全局变量或者别的。显然还是比较low的,上述是一个使用闭包的写法,并使用clearTimeout提供一个停止功能。