vart=function(a){var_this=this;this.timer=function(_a){setTimeout(function(){//TODO条件成立_this.timer(_a);},1000);}};没有清理vart=function(a,_t){var_this=this;this.timer=function(_a,_t){_t&&clearTimeout(_t);vart=setTimeout(function(){//TODO条件成立_this.timer(_a,t);},1000);}};清理了有必要清理settimeout么?暂定执行10分钟20分钟的定时器
2 回答
慕森卡
TA贡献1806条经验 获得超8个赞
没有必要,clearTimeout并不是用来清理内存的,而是用来提前移除之前的setTimeout超时事件。如果setTimeout事件已经发生了,它会自动清理那些已经超过作用域的内存。
回首忆惘然
TA贡献1847条经验 获得超11个赞
vart=function(a){var_this=this;this.timer=function(_a){setTimeout(function(){//TODO条件成立_this.timer(_a);},1000);}};以上代码你每个1000+时间就会生成一个定时器,并且定时器是不断的增长,会把你的程序搞爆的哦t.timer被执行时,生成一个匿名定时器A,每1000+会再执行一次t.timer生成另一个匿名定时器,也是每1000+执行一次的,会生成A1,A2,A3.....定时器的生成是不停的嵌套的,不停的产生而A1又会A11,A12.........以上回答为错误描述,是基于setInterval的机制下的描述,sorry@代码宇宙提醒指正请参考以下回答:t.timer被执行1次后,会生成一个新的定时器,加入到javascript的事件循环中。而这个定时器1000+到点触发后会再生成一个定时器。只要程序不停,定时器会不断生成。那么生成一个新的定时器的原定时器因为已经被调用(时间已经过期),那么定时器将会被自动清除掉,从javascript的事件循环队列中去除,没有被引用进而被GC掉。应用中只会有一个定时器有效,所以清除也没有必要。除非你想在定时器执行前取消之前的定时器,例如当t.timer的执行间隔比<1000时
添加回答
举报
0/150
提交
取消