Вход

Просмотр полной версии : Помогите начинающему разобраться с setTimeout


Rain
09.08.2011, 20:14
Есть простой код, который при клике на ссылку стартует таймер. Здесь все понятно и просто.


<a href="#" onclick="StartTimer();">Start Timer</a>
<span id="timer"></span>

<script language="javascript" type="text/javascript">

var TimeStart = 0;
var TimeStop = 100;

function StartTimer()
{
if(TimeStart <= TimeStop)
{
TimeStart++;
document.getElementById('timer').innerHTML = TimeStart;
setTimeout(StartTimer, 100);
}
else document.getElementById('timer').innerHTML = TimeStop;
}
</script>

Проблема в том, что мне нужно подправить функцию для передачи ей начала и конца отсчета. А-ля function StartTimer(Start, End).

Вот тут и начинаются проблемы...

Если я меняю строку
setTimeout(StartTimer, 100);
на
setTimeout(StartTimer(), 100);
то таймер уже стоит моментально в значении 100. Точнее она запускается 100 раз подряд без каких-либо задержек. Соответственно как запустить с интервалом функцию с параметрами я пока что не понимаю...

Надеюсь кто-то объяснит начинающему в чем подвох и где ошибка(и).
Спасибо.

ваый
09.08.2011, 20:20
<a href="#" onclick="startTimer(0, 20); return false;">Start Timer</a>
<span id="timer"></span>

<script>
function startTimer(start, stop) {
if (start <= stop) {
start++;
document.getElementById('timer').innerHTML = start;
setTimeout(function() {
startTimer(start, stop);
}, 100);
}
else document.getElementById('timer').innerHTML = stop;
}
</script>

Rain
09.08.2011, 20:29
Большое спасибо!
А не могли бы вы объяснить на пальцах разницу между передачей в качестве параметра для сетТаймаута:

setTimeout(function() { startTimer(start, stop); }, 100);

и

setTimeout(startTimer(start, stop), 100);

Заранее благодарен.

B@rmaley.e><e
09.08.2011, 20:29
Точнее она запускается 100 раз подряд без каких-либо задержек. На основании каких заблуждений Вы сделали этот вывод?Если я меняю строку
setTimeout(StartTimer, 100);
на
setTimeout(StartTimer(), 100);
то таймер уже стоит моментально в значении 100.А что еще Вы ожидаете, вызывая функцию?

Rain
09.08.2011, 20:37
На основании каких заблуждений Вы сделали этот вывод?

Вставил обычный алерт с выводом значения TimeStart

А что еще Вы ожидаете, вызывая функцию?

Мы одновременно пост писали, поэтому если не затруднит, то посмотрите мой прошлый пост (который над вашим сразу).
Я как раз и не знаю пока что чего ждать, т.к. не понимаю еще разницы что происходит между этими двумя вариантами. Поэтому и прошу чтоб мне кто-то объяснил доступным языком...

ваый
09.08.2011, 20:42
StartTimer() - вы запускаете функцию в этот же момент. На это указывают скобки.

StartTimer - просто ссылка на функцию.

Rain
09.08.2011, 21:18
Спасибо еще раз.