У меня проблема с setTimeout.. я не знаю, почему это не сработает ..

$(document).ready(function(){
var counterNum = 0;

function tick()
{        
    addText(counterNum);
    setTimeout('tick()',1000);
    counterNum++;
}

function addText(strNum)
{
 $("div.counter").empty();
 $("div.counter").append(strNum);           
}
});​

Вы можете проверить его здесь для предварительного просмотра в реальном времени ССЫЛКА

А также сэр, в чем разница между

setTimeout('tick()',1000);

А также

setTimeout(tick(),1000);

?

2
Vincent Dagpin 24 Июл 2010 в 12:44

2 ответа

Лучший ответ

Пытаться:

$(document).ready(function(){
var counterNum = 0;

function tick()
{        
    addText(counterNum);
    setTimeout(tick,1000);
    counterNum++;
}

function addText(strNum)
{
 $("div.counter").empty();
 $("div.counter").append(strNum+"");   

}

tick();

});

Разница между

setTimeout('tick()',1000)

А также

setTimeout(tick(), 1000)

Заключается в том, что второй не будет ждать 1000 мс для выполнения, но если вы измените его на

setTimeout(tick, 1000)

Это было бы фактически то же самое. Технически это изменило бы область, откуда вызывалась функция.

4
samshull 24 Июл 2010 в 08:57

В случае передачи строки JavaScript должен оценить ее для запуска вашего кода. С setTimeOut вы всегда должны использовать такой шаблон:

var self = this;
setTimeout(function(){tick();},1000);

Это дает вам закрытие и позволяет обойти тот факт, что использование setTimeOut изменяет то, что должно быть окном глобального объекта (неприятный небольшой сюрприз для разработчиков, когда они впервые сталкиваются с ним).

Попробуйте это в сочетании с рекомендациями Фредрика, и вы будете в хорошей форме.

1
mcgregok 24 Июл 2010 в 09:14