Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Очередные проблемы с setInterval (https://javascript.ru/forum/misc/23390-ocherednye-problemy-s-setinterval.html)

oke11o 22.11.2011 07:10

Очередные проблемы с setInterval
 
Здравствуйте. Извините за банальный вопрос. Просто все делаю по инструкции и ничего не получается.
Есть плагин для jQuery - jCarousel. У нее есть функция initCallback, которая вызывается после инициализации объекта carousel. Но это предисловие. Вот эта функция:
function mycarousel_initCallback(carousel, state) {
		var i = 1;
		setInterval(test(carousel, i), 2000);
		i++;
	}
	function test(carousel, i){
		console.log('test-'+i);
		//carousel.scroll(i);
		return;
	}

Так если я пишу так - на консоль выводится только одна первая надпись "test-1".
Если я пишу так
setInterval('test(carousel, i)', 2000);

то пишет, что переменные не определения ("carousel is not defined"), но зато с требуемым интервалом:). Как передать переменные в функцию для выполнения setInterval?

9xakep 22.11.2011 07:43

может так заработает:
var inter  = setInterval(function() {},2000)

melky 22.11.2011 09:53

можно засунуть её в интевал сразу.
function mycarousel_initCallback(carousel, state) {
		var i = 1;
		setInterval(function(){
		       console.log('test-'+i);
		       //carousel.scroll(i);
		       return;
                }, 2000);
		i++;
	}

Nekromancer 22.11.2011 10:40

myFn() - возвращает результат выполнения функции.
myFn - возвращает ссылку на функцию.
По этому ваша функция исполнялась один, ведь вы просто вызывали её и передавали в интервал возвращаемый параметр функции - undefined.
Конкретно в вашем случае, правильно будет выглядеть подход так -
setInterval(test, 2000, carousel, i);

Но пример выше будет правильнее.

melky 22.11.2011 11:19

Nekromancer, разве в таком случае i будет увеличиваться со временем ?

Nekromancer 22.11.2011 12:46

Ну да, не будет. Не туда смотрю, поспешил.


Часовой пояс GMT +3, время: 05:07.