Да, просто замени весь шаблон на этот:
|

12.03.2014, 23:32
|
|
Аспирант
|
|
Регистрация: 02.02.2014
Сообщений: 48
|
|
|
Очередь и наложение вызовов в setInterval
var i = 1;
var timer = setInterval(function() { alert(i) }, 20);
setInterval(function() { alert('test') }, 3000);
В данном коде раз в 3 секунды alert выдаёт 'test', всё остальное время - число 1.
1. Если сделать паузу при отображении alert'ом строки 'test', наложение вызовов мне вроде бы ясно: 1) следующий alert отобразит 1, следующий - 'test', далее наложения нет.
2. Если сделать паузу при отображении alert'ом числа 1, то следующий alert отобразит строку 'test'. Почему? Ведь по идее, следующим должен быть запланирован запуск этой же ф-ции (она становится в очередь один раз через 20мс) и только через 2800 секунды - запуск ф-ции, выдающей строку 'test'.
Изначально я подумал, что, раз alert с числом активен, то соответствующая ф-ция уже вроде как стоит в очереди. Но в примере из статьи в учебнике ( http://learn.javascript.ru/settimeou...в-setinterval) видно, что это не так:
<input onclick="clearInterval(timer)" type="button" value="Стоп">
<script>
var i = 1;
var timer = setInterval(function() { alert(i++) }, 2000);
//если немного подождать, alert блокирует работу скрипта,
//но эта же ф-ция всё равно становится в очередь (хоть и 1 раз)
</script>
|
|

13.03.2014, 14:54
|
 |
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,304
|
|
|
Сообщение от Boolean_Type
|
|
я подумал, что, раз alert с числом активен, то соответствующая ф-ция уже вроде как стоит в очереди
|
Никакой "очереди" как таковой нет. Это разные потоки, у них свой "таймер" и своя "жизнь".
Но потоки таки влияют друг на друга и могут частично "сбивать" таймер друг у друга.
Т.е. точного "отстчета" по времени исполнения не жди. Оно только стремиться к идиалу и не более того...
|
|

13.03.2014, 15:12
|
|
Аспирант
|
|
Регистрация: 01.03.2013
Сообщений: 77
|
|
думаю тут от браузера еще зависит
запусти этот код в опере (12) и в мозиле (27) можно и другие версии попробовать. увидишь, что в опере запуск функции становится в очередь, а в мозиле нет
setInterval(function(){alert(1)},12);
setInterval(function(){alert(2)},12);
setInterval(function(){alert(3)},12);
setInterval(function(){alert(4)},12);
setInterval(function(){alert(5)},12);
setInterval(function(){alert(6)},12);
|
|

14.03.2014, 15:11
|
|
Аспирант
|
|
Регистрация: 02.02.2014
Сообщений: 48
|
|
Сообщение от ksa
|
|
Никакой "очереди" как таковой нет.
|
Не уверен.
Увеличил задержку для наглядности и запустил в Опера12. Подождал после открытия первого алерта с "1" более 9-и сек:
var i = 1;
var timer = setInterval(function() { alert(i) }, 3000);
setInterval(function() { alert('test') }, 9000);
После 9-и сек ожидания жму "ОК". ТУТ ЖЕ вылазит 'test' и затем (ТУТ ЖЕ) - "1". Очевидно, что эти срабатывания были в очереди, причём ОБА (т.е., в очереди стояли срабатывания ОБОИХ таймеров). Вопрос лишь в том, почему именно такая последовательность ('test' -> "1"), а не наоборот.
|
|

14.03.2014, 15:26
|
 |
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,618
|
|
|
Не используйте alert и не ебите мозги. Реализация остановки всего потока - как пожелает левая пятка разработчика браузера. И даже если вы найдёте закономерность в конкретной версии браузера - совершенно не факт что в следующей или предыдущей версии всё не по-другому.
В рабочем js, а не высосанном из пальца, таймеры ведут себя предсказуемо.
__________________
29375, 35
Последний раз редактировалось Aetae, 14.03.2014 в 15:29.
|
|

14.03.2014, 16:03
|
|
Аспирант
|
|
Регистрация: 02.02.2014
Сообщений: 48
|
|
Сообщение от Aetae
|
|
... и не ебите мозги...
|
А по-другому в процессе обучения никак  Для меня, во всяком случае.
Сообщение от Aetae
|
|
...если вы найдёте закономерность в конкретной версии браузера - совершенно не факт что в следующей или предыдущей версии всё не по-другому.
|
Я просто думал, что, не понимая эту закономерность, я упустил что-то важное в теории, недопонял материал, короче.
Но, похоже, Вы правы. Спасибо 
Последний раз редактировалось Boolean_Type, 14.03.2014 в 16:22.
|
|

14.03.2014, 16:33
|
|
Профессор
|
|
Регистрация: 14.09.2012
Сообщений: 162
|
|
|
Сообщение от Boolean_Type
|
|
А по-другому в процессе обучения никак
|
console.log
|
|

14.03.2014, 16:47
|
|
Аспирант
|
|
Регистрация: 02.02.2014
Сообщений: 48
|
|
Сообщение от BallsShaped
|
console.log
|
Не-не-не, я имел ввиду другую часть цитаты Aetae, см. выше 
А если и говорить о console.log, то он бы данной проблемы не создал.
|
|
|
|