2013-07-10 130 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解析带有参数的函数? –