'循环'JavaScript函数

Rud*_*haw 1 html javascript web

我有以下脚本.

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);
}
Run Code Online (Sandbox Code Playgroud)

这很粗糙,我知道......而且它也没有用.我们的想法是让每个函数在给定的时间段后触发下一个函数,从而创建幻灯片,其中img重复更改.我想使用body onload ="slideShow1()"

I a*_*ica 6

这些括号会导致您的函数立即执行.

setTimeout(slideShow2(), 5000);
Run Code Online (Sandbox Code Playgroud)

因此,您认为您正在传递函数,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);
}
Run Code Online (Sandbox Code Playgroud)

  • 另一种说法:你传递"_执行函数_的结果",而不是传递"_a引用稍后将执行的函数_". (2认同)