3 回答

TA貢獻1825條經驗 獲得超6個贊
用途setTimeout():
var delayInMilliseconds = 1000; //1 second
setTimeout(function() {
//your code to be executed after 1 second
}, delayInMilliseconds);

TA貢獻1900條經驗 獲得超5個贊
javascript setTimeout和setInterval(other)中有兩種(最常用的)計時器函數類型
這兩種方法都具有相同的簽名。他們以回調函數和延遲時間為參數。
setTimeout在延遲之后僅執行一次,而setInterval在每個延遲毫秒后繼續調用回調函數。
這兩種方法都返回一個整數標識符,可用于在計時器到期之前清除它們。
clearTimeout和clearInterval這兩種方法采取從上面函數返回一個整數標識符setTimeout和setInterval
例:
setTimeout
alert("before setTimeout");
setTimeout(function(){
alert("I am setTimeout");
},1000); //delay is in milliseconds
alert("after setTimeout");
如果運行上面的代碼,您將看到它發出警報before setTimeout,然后after setTimeout最終I am setTimeout在1秒(1000毫秒)后發出警報
您可以從示例中注意到,setTimeout(...)異步是異步的,這意味著在等待下一個語句之前,它不會等待計時器過去alert("after setTimeout");
例:
setInterval
alert("before setInterval"); //called first
var tid = setInterval(function(){
//called 5 times each time after one second
//before getting cleared by below timeout.
alert("I am setInterval");
},1000); //delay is in milliseconds
alert("after setInterval"); //called second
setTimeout(function(){
clearInterval(tid); //clear above interval after 5 seconds
},5000);
如果運行上面的代碼,您將看到它發出警報before setInterval,然后after setInterval最終I am setInterval 在1秒(1000毫秒)后發出5次警報,因為setTimeout在5秒鐘后清除了計時器,否則每1秒鐘您將收到I am setInterval無限次警報。
瀏覽器內部如何運作?
我將簡要解釋。
要了解您必須了解JavaScript中的事件隊列。在瀏覽器中實現了一個事件隊列。每當js中觸發一個事件時,所有這些事件(例如click等)都會添加到此隊列中。當您的瀏覽器沒有什么要執行時,它將從隊列中獲取一個事件并逐一執行它們。
現在,當您調用setTimeout或setInterval您的回調在瀏覽器中注冊一個計時器,并在給定時間到期后將其添加到事件隊列中,并最終javascript從隊列中獲取事件并執行該事件。
發生這種情況是因為javascript引擎是單線程的,并且它們一次只能執行一件事。因此,他們無法執行其他javascript并跟蹤您的計時器。這就是為什么這些計時器是在瀏覽器中注冊的(瀏覽器不是單線程的),并且它可以跟蹤計時器并在計時器到期后在隊列中添加事件。
setInterval僅在這種情況下,會發生同樣的情況,即在指定的時間間隔后將事件一次又一次地添加到隊列中,直到事件被清除或刷新瀏覽器頁面。
注意
傳遞給這些函數的delay參數是執行回調的最短延遲時間。這是因為在計時器到期后,瀏覽器將事件添加到要由JavaScript引擎執行的隊列中,但是回調的執行取決于您事件在隊列中的位置,并且由于引擎是單線程的,因此它將在其中執行所有事件。隊列一個接一個。
因此,當您的其他代碼阻塞線程并且沒有給它時間來處理隊列中的內容時,回調可能需要比指定的延遲時間更多的時間來專門調用。
正如我提到的,javascript是單線程。因此,如果您長時間阻塞線程。
像這樣的代碼
while(true) { //infinite loop
}
您的用戶可能會收到一條消息,指出頁面沒有響應。
添加回答
舉報