1. 程式人生 > >javascript定時器詳解

javascript定時器詳解

JS定時器

定時器是javascript的重點部分,在以後的很多實戰專案裡都會用到。

在javascript中,與定時器有關的方法是:

setInterval、clearInterval

以及

setTimeout、clearTimeout

這些方法都是定義在window物件上面的,因此我們寫window.setInterval和解setInterval的意思是一樣的,前面的window可以省略掉。

setInterval這個定時器的功能是每過一段時間,就把我們想要執行的函式放到js的執行佇列中等待執行。因為執行佇列不一定是空的,需要等執行佇列中的所有任務都執行完之後才會執行我們的函式,因此這個函式執行的時間也會有細微的差別。

這個方法的語法是:

window.setInterval(function () {}, 1000);

第一個引數是我們要執行的函式,第二個引數是每過多長時間把函式放入執行佇列。

這裡要說明的是,第一個引數的那個函式,不能帶有引數。其次,裡面的this預設指向window,因為前面提到過,誰呼叫方法,方法裡面的this就指向誰,setInterval其實前面省略了window,因此裡面的this預設一定指向window,不論這個setInterval是否是一個物件的方法。

setInterval其實很消耗記憶體,這個定時器一旦執行,就不會終止,因此需要我們的核心一直監聽這個函式。

這個時候我們就需要一個方法來清除定時器了:clearInterval。

定時器其實會返回一個標記,我們可以通過定時器的這個標記來清除掉相對應的定時器。



1 var i = 0;
2   var timer = setInterval(function () {
3         i++;
4         if(i === 10) {
5               clearInterval(timer);
6         }
7   }, 100);

 

JavaScript; “複製程式碼”); “檢視純文字程式碼”); “返回程式碼高亮”)

實際上,如果我們列印這個timer來看的話,它就是一個數字1,我們再開一個定時器,返回的就是2,也就是說,這個標記就是定時器的序號數,我們直接clearInterval(1);其實也可以清除掉第一個定時器,不過這裡還是用標記來清除較好。

因此這裡有一點需要特別強調:凡是寫定時器,一定要清除定時器!

好像有一次沒清除,電腦卡爆了!

還有一點需要注意的是,定時器是先等待再執行。

有時候我們只需要這個函式延遲一段時間執行,並不需要專門開啟一個定時器,這個時候就需要用到setTimeout了。

setTimeout是延遲執行的意思,語法和用法和setInterval一樣,只是這個方法只是把函式延遲一段時間之後執行一次而已。

同時它也有clearTimeout,當我們不想讓這個函式執行了,提前把它clear掉就可以了。

其實setInterval和setTimeout的第一個引數不一定非要是一個函式,它也可以是一串字元型的js程式碼。


 1 setInterval(“console.log(1);”, 100);  
JavaScript; “複製程式碼”); “檢視純文字程式碼”); “返回程式碼高亮”)

這段程式碼同樣可以執行,定時器每100ms給我們列印一個1。

通過這個特性,我們不一定要把函式寫在定時器裡面,大部分時間我們都是在外部把函式定義好了,然後直接把函式名傳進去就可以了。


 1 function test () {} 2 setInterval(test, 1000);   
JavaScript; “複製程式碼”); “檢視純文字程式碼”); “返回程式碼高亮”)

那麼這一次的知識點就這麼多喲~