- 今天在修改bug 的时候 无意间发现一个问题 : interval 一直在执行 而且一直在执行关闭 interval 的方法, 我就去探索了一下 代码的问题 :
- 我提取出来的代码, 大概就是因为我先设置了一个interval , 它会在一定情况下再次赋值, 再次执行这个interval (赋值次数不定)。
- 这样interval 就会一直执行 也会一直执行关闭 interval 的方法 但是并没有用
- 代码片 :
var interval;
var intervalFun = function() {
this.i?(this.i += 1):(this.i = 1);
console.log("第" + this.i + "次执行!");
if(this.i % 10 == 0 && interval) {
window.clearInterval(interval);
console.log("这里关闭了执行器!");
}
}
var getIntervalFun = function( time) {
return window.setInterval(intervalFun, time);
}
interval = getIntervalFun(1000);
window.setTimeout(function() {
interval = getIntervalFun(900);
}, 900);
- 经过测试 发现如果把代码 改成这样 那就不会出现这个问题了
- 代码片段
var interval;
var intervalFun = function() {
this.i?(this.i += 1):(this.i = 1);
console.log("第" + this.i + "次执行!");
if(this.i % 10 == 0 && interval) {
window.clearInterval(interval);
console.log("这里关闭了执行器!");
}
}
var getIntervalFun = function( time) {
return window.setInterval(intervalFun, time);
}
interval = getIntervalFun(1000);
window.setTimeout(function() {
window.clearInterval(interval);
interval = getIntervalFun(900);
}, 900);
- 总结一下 :
- 每次新建一个 interval 并没有关闭前一个 interval, 赋值给 interval 只是外面变量的值变了 而interval的执行任务 没有变,还是在执行。