我现在想单独创建一个js分类了。。。
咳咳,我们先来说间歇调用和超时调用的区别。间歇调用就是设置之后会会持续不断的触发超时,每次超时调用一次; 而超时调用是设置之后只会在第一次超时的时候调用。
超时调用
以下代码是超时调用:
1 2 3 4 5 6
| function sayTimeOut(){ console.log("Time Out!!"); }
setTimeout(sayTimeOut, 1000);
|
运行这段代码,我的Console(控制台)输出了以下内容:
取消超时调用
如果想要在超时之前取消掉这个调用,可以使用clearTimeout函数,下面是示例代码:
1 2 3 4 5 6 7
| function sayTimeOut(){ console.log("Time Out!!"); }
var timerId = setTimeout(sayTimeOut, 1000);
window.clearTimeout(timerId);
|
运行这段代码,我的Console(控制台)什么也没有输出,这很正常,因为我的机器还没有弱到一秒种只能执行一条js语句。只有在这个超时调用被调用前可以使用clearTimeout()函数,道理也十分简单: 都调用完了再取消调用也没用了。
间歇调用
先看代码:
1 2 3 4 5 6
| function sayTimeOut(){ console.log("Time Out!!"); }
setInterval(sayTimeOut, 1000);
|
这段代码会导致Console(控制台)每隔1秒输出一次”Time Out!!”。
取消间歇调用
取消间歇调用的方法和关掉超时调用的方法类似:
1 2 3 4 5 6 7
| function sayTimeOut(){ console.log("Time Out!!"); }
var timerId = setInterval(sayTimeOut, 1000);
window.clearTimeout(timerId);
|
红宝书上说,建议使用超时调用来代替间歇调用,因为超时调用会在前一个超时调用执行完之后执行,但是间歇调用不会,所以使用间歇调用可能会出现前一个间歇调用还在执行中,后一个间歇调用已经开始执行了的情况。
替代方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| function TimeOutTest(){ }; TimeOutTest.prototype.num = 0; TimeOutTest.prototype.maxNum = 10; TimeOutTest.prototype.startCount = function(){ TimeOutTest.prototype.num++; if(that.num < that.maxNum) { console.log(that.num); setTimeout(this.startCount.bind(this), 1000); } else { console.log("Done"); } } var tot = new TimeOutTest(); tot.startCount();
|
Console(控制台)输出如下:
本篇完。