超時呼叫(setTimeout)和間歇呼叫(setInterval)
阿新 • • 發佈:2018-11-07
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);
注意:
使用超時呼叫來模擬間歇呼叫,是一種最佳模式。因為後一個間歇呼叫可能會在前一個間歇呼叫結束之前啟動