我是一個JavaScript新手,我試圖通過setInterval
和setTimeout
來實現併發操作。setInterval和setTimeout的併發操作
我想要達到的目標,實際發生的事情和我期望發生的事情最好用下面的代碼解釋。
var myVar = setInterval(function() {
myTimer()
}, 1000);
function myTimer() {
var d = new Date();
var t = d.toLocaleTimeString();
document.getElementById("demo").innerHTML = t;
}
for (var i = 0; i < 100; i++) {
setTimeout(function() {
console.log("log " + i);
}, 3000);
}
<p>A script on this page starts this clock:</p>
<p id="demo"></p>
我的期望爲主導setInterval
,是函數myTimer
,每次執行第二個獨立的事後會發生什麼。當然,如果該網站已關閉或clearTimeout
被稱爲myVar
。
我無法驗證這個動作是否真的獨立發生,並且持續進行。
以下爲循環,是否有模擬進一步的代碼,看看myTimer
函數是否會獨立執行。
我預計循環以i=0
開始,然後等待三秒鐘,將日誌log 0
添加到控制檯,然後繼續使用i=1
等等。
取而代之的是,超時已開始,並且i
已到達for循環的末尾,因此爲100
。
如何讓for循環等待迭代爲setTimeout
?
而且是setInterval
真的每秒執行一次,獨立於以下代碼?例如。如果以下代碼具有需要一些處理/時間的操作,那麼在處理過程中時鐘是否會更新?
你可能看看這裏:http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example –
我會去,謝謝。如果我正確理解它,它會涉及迭代和'i'變量。你對'setInterval'和'setTimeout'的問題有評論嗎? – MikeDyson
你也許會發現這個有用[JavaScript中有睡眠函數嗎?](http://stackoverflow.com/questions/1141302/is-there-a-sleep-function-in-javascript)。看起來你正在試圖使用settimeout暫停執行 - 但這樣做不起作用,因爲settimeout不會阻止執行,它通過將回調放到事件隊列中以便稍後執行 - 當前輪到的時間立即繼續。 –