简介不知道大家有没有这样的经历:突然发现之前根深蒂固很久的一个观点是错误的?今天踩了个坑:一直记得setInterval定义后会执行一次逻辑,所以在实现下图逻辑的时候,第二步(“立即执行逻辑a”)被省略了,但是这个疏漏给我带来了bug,汗~有bug一定要补,态度不能丢!青铜级说到最简单的修复方案,也就是我们经常使用的方法,代码如下:functionfun(){}fun();setInterval(fun,1000);是的,就是这么朴实无华!钻石级既然是钻石级,那肯定要玩点花样的,不然就是浪费时间。上面的青铜级实现其实有一个隐患:不能保证同一时刻只有一个定时器在执行这个逻辑。那我们再封装一下:lettimer=null;functionfunc(){}functionmainFun(callback,ti??me){callback();returnsetInterval(callback,ti??me);}timer&&clearInterval(timer);timer=mainFun(func,1000);星光使用目标函数返回目标函数本身。lettimer=null;functionfunc(){}timer&&clearInterval(timer);timer=mainFun(func(),1000);嗯,代码风格有点高级。既然王级需要立即执行,那为什么不用一个自执行函数呢?lettimer=null;timer&&clearInterval(timer)timer=setInterval((functionfunc(){})(),1000);虽然逻辑和上面一样,但是不知道为什么这么写感觉有点高大上,^-^结论其实我还是没明白为什么我的记忆这么差,我也没有找了这么长时间的修正。犯错误并不可怕,可怕的是你没有意识到自己犯了错误!自己要勤奋,不管别人的实现方法多么先进,其实都是一些基础知识合理组合的结果。只要基础够好,简单的一段代码也能玩。想出不一样的招数!~~本文到此结束,感谢阅读!~学习有趣的知识,认识有趣的朋友,塑造有趣的灵魂!大家好,我是〖编程三昧〗的作者王隐,我的公众号是《编程三昧》,欢迎关注,希望大家多多指教!
