[英]control flow of program when using setInterval() in javascript
當我在Javascript中使用setInterval()
時,我真的不理解程序的控制流程。
如果我們提供一個需要100毫秒時間才能執行的函數作為SetInterval()
方法的參數,而時間則為20毫秒,如下所示
setInterval(function{
for(var i=0;i<1000000;i++)
console.log(i)
},20);
當setInterval()
在20ms之后再次調用它時,會發生什么?
thanx :)
添加 :簡單循環與使用setInterval進行循環與使用clearInterval進行停止之間的主要區別是什么?
檢查此http://www.sitepoint.com/multi-threading-javascript/
首先,讓我們開始修復您的JavaScript,因為您缺少一些右括號:
setInterval(function() {
for(var i = 0; i < 1000000; i++) {
console.log(i);
}
}, 20);
等效於以下內容:
function loopAndDump() {
for(var i = 0; i < 1000000; i++) {
console.log(i);
}
}
setInterval(loopAndDump, 20);
要么:
setInterval(function() { loopAndDump(); }, 20);
現在,更容易理解發生了什么: loopAndDump
函數每隔20ms定期調用一次。 該函數只是從0到1000000循環,並將計數器轉儲到控制台。 而且,如果您想停止此過程以固定的時間間隔執行該函數,則可以使用stopInterval函數,並將其作為參數傳遞給setInterval函數返回的結果。
如果您只想執行一次功能,則可以使用setTimeout方法:
setTimeout(function() {
for(var i = 0; i < 1000000; i++) {
console.log(i);
}
}, 20);
現在循環將只執行一次,即javascript解釋器到達setTimeout行后20毫秒。
20毫秒后將不會再次調用它。
Java嚴格來說是單線程的,因此只要您的函數正在運行,就不會處理任何事件。 間隔計時器將在20毫秒后觸發一個事件,但直到功能完成后才會處理。
setInterval
是一個Javascript計時器。 永遠記住:在Javascript中,無法保證計時器延遲。 由於瀏覽器中的所有JavaScript都在單個線程上執行,因此異步事件僅在執行中存在空缺時才運行。
var some_function = function() {
for (var i=0; i < 1000000; i++) {
console.log(i);
}
};
setInterval(some_function, 20);
執行此示例后,JavaScript啟動計時器,並在20毫秒內執行some_function
假設some_function
完成需要100毫秒,則函數完成執行約100毫秒之后,JavaScript將會環顧四周,以查看等待執行的內容。
將發現在開始執行setInterval
后約20ms時,收到另一個執行some_function
請求(由setInterval
設置的計時器)。 在接收命令時,由於JavaScript忙於運行some_function
,因此無法執行該命令。
由於沒有任何東西可以阻止setInterval
操作的發生,因此JavaScript將重新執行它。 自setInterval計時器啟動以來,已經過去了約120毫秒,並且some_function
顯然將背對背執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.