settimeout 模拟setInterval内存释放问题

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分钟的定时器
拉莫斯之舞
浏览 789回答 2
2回答

慕森卡

没有必要,clearTimeout并不是用来清理内存的,而是用来提前移除之前的setTimeout超时事件。如果setTimeout事件已经发生了,它会自动清理那些已经超过作用域的内存。

回首忆惘然

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的执行间隔比
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript