Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Помогите начинающему разобраться с setTimeout (https://javascript.ru/forum/events/20566-pomogite-nachinayushhemu-razobratsya-s-settimeout.html)

Rain 09.08.2011 20:14

Помогите начинающему разобраться с setTimeout
 
Есть простой код, который при клике на ссылку стартует таймер. Здесь все понятно и просто.

<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

Цитата:

Сообщение от Rain
Точнее она запускается 100 раз подряд без каких-либо задержек.

На основании каких заблуждений Вы сделали этот вывод?
Цитата:

Сообщение от Rain
Если я меняю строку
setTimeout(StartTimer, 100);
на
setTimeout(StartTimer(), 100);
то таймер уже стоит моментально в значении 100.

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

Rain 09.08.2011 20:37

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 119279)
На основании каких заблуждений Вы сделали этот вывод?

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

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 119279)
А что еще Вы ожидаете, вызывая функцию?

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

ваый 09.08.2011 20:42

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

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

Rain 09.08.2011 21:18

Спасибо еще раз.


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