關於setTimeout與setInterval的使用與區別

window.setTimeout與window.setInterval

概念:window.setTimeout()是一個定時器,該定時器在定時器到期後執行一個函數或指定的一段代碼。返回一個 timerID。window.setInterval()是一個間斷執行的定時器,可以叫間隔器,是重複調用一個函數或執行一個代碼段,在每次調用之間具有固定的時間延遲。返回一個 intervalID。通過clearTimeout與clearInterval可以分別清除定時器和間隔器,從而停止執行。

使用方式:

setTimeout (表達式, 延時時間)

setInterval(表達式, 交互時間)

延時時間/交互時間是以豪秒為單位的(1000ms=1s)

兩者區別:

setTimeout()方法是在等待指定時間後執行函數內容, 且只執行一次傳入的表達式。

setInterval()方法是每指定間隔時間後執行一次傳入的表達式,循環執行直至關閉窗口或clearInterval()。

setTimeout用於延遲執行:

let x = 1;

setTimeout(() => x++, 0);

console.log(x);

若在控制檯輸出,也就是異步調用時會獲得2

關於setTimeout與setInterval的使用與區別

setInterval用於間隔執行:

let x = 1;

var interval1 = setInterval(() => x++, 1000);

console.log(x);

若異步調用時,每個1秒會發現x增1

關於setTimeout與setInterval的使用與區別

下面是一些例子,如果能你能理解其中的意思,那麼就可以說會用了。

1. 簡單例子

let a = 1;

let timerId = setTimeout(function() {

a++;

console.log('inner:', a);

},0);

console.log('outer:', a);

2. 延遲執行

let i = 0;

while(i < 10) {

setTimeout(function() {

console.log(i);

}, 1);

i++;

}

3 .串行改並行執行

let data = [];

for(let i = 0; i <= 999; i++) {

data[i] = {

number: Math.random()

}

};

for (let item of data) {

console.time();

setTimeout(function() {

item.number += 1;

}, 0);

setTimeout(function() {

item.id = 'id:' + item.number;

}, 0);

console.timeEnd();

}

// 當數據操作步驟太複雜,步數太多時,可以讓一些操作異步來執行,這樣瀏覽器不至於阻塞於此而卡死,可以把同步變異步延遲下計算,這樣可以解決複雜運算問題。也可以利用Promise來實現類似功能

4. 移開浮層關閉

ele.addEventListener('click', function() {

setTimeout(

function() {

$ele.hide();

}

, 500)

}, false);

// 這是延遲執行與DOM結合的例子,不想讓事件執行後馬上得到結果,而是延遲一段時間之後執行。

4. DOM動畫

var interval2 = setInterval(function() {

if (ele.style.left < screen.width) {

ele.style.left = ele.style.left + 10 + 'px';

} else { clearInterval(interval2); }

}, 20);

// JS做動畫就離不開定時器和間隔執行器。相比來講,動畫用間隔較好,但是要記住滿足條件後清除掉間隔器。

// 這裡只是示例用法,真實動畫需要自己微調

5. 測驗題,結合作用域,看下你能回答正確並能說出結果以及順序的原因來嗎?

test1:

function callback(a){

return function(){

alert("Hello " + a);

}

}

let a = "world";

setTimeout(callback(a), 1000);

a = "你好";

test2:

function callback(a){

return function(){

alert("Hello " + a);

}

}

let a = "world";

setTimeout(function() {

callback(a)();

}, 1000);

a = "你好";

如果你都能回答正確,那麼setTimeout與setInterval用法就全掌握了哦。


分享到:


相關文章: