vue中,我在mounted和activated中都写了
this.timerObj = setInterval(() => {
this.increaseReadTime(10);
}, 3000);
然后在deactivated和destroyed中都写了
clearInterval(this.timerObj);
this.timerObj = null;
结果这个代码出现一个问题,回到上一页后,定时器还在运行
研究了一会儿,发现这个setInterval执行了两次,导致往事件队列中塞入了两次setInterval函数,此时this.timerObj只指向其中一个,清除时也只能清除一个,并且在JavaScript中,定时器(由 setInterval 或 setTimeout 创建)不会被垃圾回收,即使没有对它们的引用。就导致另一个定时器仍然在事件队列中执行。
网友评论