2015-09-03 7 views
0

Второй параметр в функции setInterval предназначен для задержки выполнения в миллисекундах. и как ожидается, 1000 миллисекунд вызовут функцию каждую секунду. но вот странная вещь, что я не очень понимаю. Во втором интервале я установил параметр задержки в 1 миллисекунду и поместил внутри инкрементного номера функции и условия для проверки каждого прошедшего 1000 номера. Я ожидал, что он будет вести себя точно так же, как таймер интервала секунд. но я не уверен, как я надеялся.Определение секунд в миллисекундном интервале

Есть ли какие-либо объяснения?

// detect seconds in a second interval timer (works as expected) 
setInterval(function() { 
    console.log('passed second from the secondInterval'); 
}, 1e3); 

// detect seconds in a millisecond interval timer (I don't have any explanation for the behavior). 
(function() { 
    var i = 0; 
    setInterval(function() { 
     if (i === 0) { 
      i++; 
      return; 
     } 

     if (i % 1000 === 0) console.log('passed second from the millisecondInterval'); 
     i++; 
    }, 1); 
})(); 

чек из примера в jsfiddle, чтобы увидеть, что я имею в виду http://jsfiddle.net/dwh82zos/

+0

http://stackoverflow.com/questions/9647215/what-is-minimum-millisecond-value-of-settimeout –

+1

Задержка выражается в миллисекундах, но не имеет миллисекундной точности. Подумайте об этом скорее как о предположении. Вы действительно хотите, чтобы веб-страницы запускали код 1000 раз в секунду? Реальный минимум, вероятно, составляет порядка 10-15 мс, в зависимости от браузера, ОС и т. Д. – Cameron

+0

@ Камерон, который будет очень плохим, если вы работаете над рамками анимации, и вам действительно нужно, чтобы он был настолько точным. – Husamuddin

ответ

1

Это происходит. Предложение не регистрируется каждую секунду или независимо от того, что может сделать ваш компьютер. У вас закончилась нехватка памяти, она не может разрешить, первый раз 6 операций за 1 мс и 3 операции за 1 мс. Взгляните на это What is minimum millisecond value of setTimeout? Речь идет о setTimeout, но это полезно.