Почему не работает setInterval? - PullRequest
       20

Почему не работает setInterval?

0 голосов
/ 13 сентября 2011

код:

setInterval("doSomething()", 2000);
function doSomething(){alert('hi')}

демо: http://jsfiddle.net/PRff7/

Я читал об этом , и я просто не могу заставить пример работать: (

Ответы [ 4 ]

8 голосов
/ 13 сентября 2011

Ваш код не выполняется из-за jsfiddle.Он обернул ваш код в обработчик загрузки, таким образом удерживая doSomething вне глобального пространства имен.Поэтому, когда setTimeout попытался выполнить ваш код, он не смог найти doSomething.Измените jsfiddle так, чтобы он выполнял «no wrap», и все хорошо: http://jsfiddle.net/gilly3/PRff7/3/

Если вы не переносите свой вызов на doSomething в строке, он также будет работать, потому что setInterval получает прямоессылка на doSomething, которая находится в той же области.Для этого не нужна глобальная ссылка.

3 голосов
/ 13 сентября 2011

Вам нужно изменить его на

setInterval(doSomething, 2000);
function doSomething(){alert('hi')}
2 голосов
/ 13 сентября 2011

Вы не должны передавать строку в setInterval.

Вместо этого передайте саму функцию:

setInterval(doSomething, 1000);
1 голос
/ 14 сентября 2011

Если вы хотите оставить свой код встроенным, а не делегировать его какой-либо именованной функции (особенно, если код состоит из более чем одной команды), используйте это:

setInterval( function(){ alert('hi'); alert('hello') }, 2000);
...