爲什麼我們需要一個函數傳遞到Java腳本的setTimeout https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setTimeoutJs:setTimeOut沒有函數參數?
爲什麼我們不能做到像
setTimeOut(1000);
SG簡單的我可以傳遞一個空的或不存在的功能在那裏?
我想在每次迭代後等待for循環。
爲什麼我們需要一個函數傳遞到Java腳本的setTimeout https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setTimeoutJs:setTimeOut沒有函數參數?
爲什麼我們不能做到像
setTimeOut(1000);
SG簡單的我可以傳遞一個空的或不存在的功能在那裏?
我想在每次迭代後等待for循環。
Javascript是單線程的。您可以使用setTimemout
推遲一個操作,但該線程將繼續。所以
function some() {
doStuff();
setTimeout(otherStuff, 1000);
doMoreStuff();
}
將運行doStuff
和doMoreStuff
隨後,並且將第二後運行otherStuff
。這就是爲什麼使用setTimeout
作爲延遲本身是無用的和不可能的。如果doMoreStuff
應推遲,你應該對於延遲迴調:
function some() {
doStuff();
setTimeout(doMoreStuff, 1000);
}
或兩者otherstuff
和doMoreStuff
延遲:
function some() {
doStuff();
setTimeout(function() {
otherStuff();
doMoreStuff()
}, 1000);
}
也許我的回答是this SO-question有用了。
@Kooilnc在這篇文章中,所有這些解決方案都很好嗎?:[Post](http://stackoverflow.com/questions/5226285/settimeout-in-a-for-loop-and-pass-i-as-value) 。您發佈了一個很好的解決方案,但鏈接中的解決方案僅適用於兩次迭代。通過兩次以上的迭代,它會繼續發射,並讓你回到隨機數。瀏覽器在過去幾年中如何處理循環中的超時有什麼變化? – Michelangelo 2015-02-09 10:32:45
@Mikey:檢查我鏈接的問題的答案,並檢查該答案中的jsfiddle(http://jsfiddle.net/KooiInc/k47rw5o4/) – KooiInc 2015-02-09 10:57:55
謝謝。很多解釋。 – Michelangelo 2015-02-09 11:02:58
setTimeout在事件循環中註冊一個。當JavaScript完成所有當前指令後,它將返回到事件循環並等待事件發生。當它發生時,它會調用回調函數,這是您傳遞給setTimeout的函數。
做一個for循環與setTimeout的,做這樣的事情:
function loop(i, n) {
doStuff();
if (i < n) {
setTimeout(function() {
loop(i+1, n);
}, 1000);
}
};
loop(0, 10);
其中i爲當前迭代,n是最大迭代
當JavaScript是不是在事件循環,即它運行的代碼,它使整個瀏覽器無響應。只需怠速一秒鐘就可以做到這一點,所以如果你在循環中迭代10次,瀏覽器將在10秒內無響應。
- >setTimeout(callbackFunction[, interval])
這可以被理解爲你準備了指定的時間後調用具有指定名稱(由您提供)的功能。
- >你不能做這樣的setTimeOut(1000);
因爲1000會回調函數來處理作爲setTimeout()
的第一個參數是回調函數。
你不能這樣定義一個函數
function 1000() { // Code Resides here. }
因爲Java腳本不允許這些類型的函數名。
- >可以傳遞匿名函數來setTimeout()
像
setTimeout(function() { // Code resides here. }[, interval]);
上述功能碼會在給定的時間間隔之後執行。如果沒有給出時間間隔,則立即執行。
注: - 在方括號( [,] )是可選的通過給定的參數。
- >您可以參考您的使用下面提到的線程:JavaScript sleep/wait before continuing
由於這個線程包含一個函數定義,就像其他語言sleep()
。
你是說像PHP中的sleep()方法? Javascript中沒有這樣的東西。你必須用'setTimeOut'或'setInterval'來完成。 – Michelangelo 2015-02-09 09:59:45
是的:)在PHP中sleep()非常方便。 – giorgio79 2015-02-09 10:09:25
我知道對...希望他們正在努力:) – Michelangelo 2015-02-09 10:33:50