Показать сообщение отдельно
  #1 (permalink)  
Старый 13.03.2014, 01:32
Аспирант
Отправить личное сообщение для Boolean_Type Посмотреть профиль Найти все сообщения от Boolean_Type
 
Регистрация: 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>
Ответить с цитированием