2013-07-10 126 views
1

我有下面的腳本。'循環'JavaScript函數

function slideShow1(){ 
    document.getElementById('dynimg').src="Other/noctis.jpg"; 
    var timer1 = setTimeout(slideShow2(),5000); 
} 

function slideShow2(){ 
    document.getElementById('dynimg').src="Other/retriever.jpg"; 
    var timer2 = setTimeout(slideShow3(),5000); 
} 

function slideShow3(){ 
    document.getElementById('dynimg').src="Other/miningop2.jpg"; 
    var timer3 = setTimeout(slideShow1(),5000); 
} 

這很粗糙,我知道......而且它也不起作用。這個想法是每個函數在給定時間段後觸發下一個函數,因此創建一個幻燈片,其中和img被重複更改。我正在嘗試使用body onload =「slideShow1()」

回答

6

這些括號導致您的函數立即執行。

setTimeout(slideShow2(), 5000);

這樣,你認爲你是通過你的功能setTimeout但你實際上執行你的函數並通過其返回值undefined在這種情況下)。

因此,您的功能立即被調用,並且setTimout在五秒鐘後沒有任何執行。

只是刪除括號:

function slideShow1(){ 
    document.getElementById('dynimg').src = "Other/noctis.jpg"; 
    setTimeout(slideShow2, 5000); 
} 

function slideShow2(){ 
    document.getElementById('dynimg').src = "Other/retriever.jpg"; 
    setTimeout(slideShow3, 5000); 
} 

function slideShow3(){ 
    document.getElementById('dynimg').src = "Other/miningop2.jpg"; 
    setTimeout(slideShow1, 5000); 
} 
+2

另一種方式來表達:你傳遞,而不是通過「_a參考,將獲得later_執行的函數」,「執行FUNCTION_的_The結果」。 – jahroy

+0

因此,該函數返回的對象將成爲調用'call()'方法的對象。 – mgarciaisaia

+0

這是否意味着我無法使用setTimeout解析帶有參數的函數? –