2013-07-10 5 views
1

У меня есть сценарий ниже.«Looping» Функции 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 меняются несколько раз. Я пытаюсь использовать тело 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

Другой способ сказать: вы передаете «_The результат выполнения function_», а не прохождение «ссылка _A к функции, будут выполнены later_». – jahroy

+0

Таким образом, объект, возвращаемый функцией, будет тем, который будет вызван методом 'call()'. – mgarciaisaia

+0

Означает ли это, что я не могу разобрать функцию с аргументом в setTimeout? –