簡體   English   中英

在javascript中使用setInterval()時控制程序流

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM