导致失败的写法

可以很明显的观察到间隔没有变化

1
2
3
4
5
6
7
8
var speed = 2000;
var timeId = setInterval(function () {
speed /= 2;
console.log('test');
if(speed <= 10){
clearInterval(timeId);
}
}, speed);

正确写法

可以很明显的观察到间隔的变化

1
2
3
4
5
6
7
8
9
10
var speed = 2000;
var timeId = setInterval(fn, speed);
function fn() {
console.log('test');
speed /= 2;
clearInterval(timeId);
if (speed > 0) {
timeId = setInterval(fn, speed);
}
}

结论

不能直接改变speed的值,改了也不会起任何效果;正确的做法是先通过clearInterval方法暂停之前的定时器,然后递归调用。