2017-05-25 19 views
-1

說我有三個函數,我想順序運行5次,每次之間等待一秒,第一個函數將for循環中的變量作爲參數。這樣的事情:在for循環中執行三個不同的函數有延遲

for (var i=0; i<5; i++) { 
    setTimeout(function(){ 
     one(i); 
    },1000); 
    setTimeout(function(){ 
     two(); 
    },2000); 
    setTimeout(function(){ 
     three(); 
    },3000); 
} 

我試過這個,它似乎沒有工作。我怎樣才能解決這個問題?

+0

一種方法你的目標是調用函數'兩()'從功能'一個()'內超時,和功能'的三()'用超時從函數'two()'中。 –

回答

1

setTimeout()設置一個計時器來運行在未來的功能,但立即返回,這樣你的函數將在1秒鐘後運行one() 5次,2秒,three() 5次後3秒後two() 5倍。

你可以實現與

for (var i=0; i<5; i++) { 
    setTimeout(function(){ 
     one(i); 
    },(i * 3 + 1) * 1000); 
    setTimeout(function(){ 
     two(); 
    },(i * 3 + 2) * 1000); 
    setTimeout(function(){ 
     three(); 
    },(i * 3 + 3) * 1000); 
} 
+0

完美的作品!你能向我解釋一下你如何設置間隔,以便我能更好地理解它?非常感謝你 – user3385777

+1

所有的事件都是立即設置的,所以所有的事件都是相對於開始時間的。如果我們忽略'* 1000'(這只是將ms轉換爲秒),我們只是設置爲to(i * 3)(即5個循環中的每個循環爲3秒)加上功能1,2或3秒一個(),兩個()和三個() – mykel