超时调用(setTimeout)和间歇调用(setInterval)

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);

注意
使用超时调用来模拟间歇调用,是一种最佳模式。因为后一个间歇调用可能会在前一个间歇调用结束之前启动

猜你喜欢

转载自blog.csdn.net/xujiezi/article/details/51119540