1.超时调用
console.log(1);
var timeouId = setTimeout('console.log(12)', 2000); // 不会阻塞,而是在多长时间后将此任务添加到任务队列,然后任务队列根据添加进来任务的先后顺序进行执行,故此处不一定是2s后执行。第一个参数可以是函数,也可以是字符串,此处尽量不要写字符串
clearTimeout(timeouId); // 可能导致立刻被取消,从而上面的setTimeout的函数不再执行
console.log(2);
超时调用的clearTimeout(取消尚未执行的超时调用计划)一般是不用的
2.间歇调用
var intervalId = null,
num = 0,
max = 10;
function intervalHandler() {
num++;
if (num === max) {
clearInterval(intervalId);
alert("done");
}
}
intervalId = setInterval(intervalHandler, 500);
而clearInterval(取消间歇调用)一般是必须的,否则,直到页面卸载,程序还在执行。
这个模式也可以使用超时调用来实现:
var num = 0,
max = 10;
function timeoutHendler() {
num++;
if (num < max) {
setTimeout(timeoutHendler, 500);
} else {
alert("done");
}
}
setTimeout(timeoutHendler, 500);
注意:
使用超时调用来模拟间歇调用,是一种最佳模式。因为后一个间歇调用可能会在前一个间歇调用结束之前启动