Ответ 1
Позвольте мне привести превосходную статью о таймерах Джона Ресига:
setTimeout(function(){
/* Some long block of code... */
setTimeout(arguments.callee, 10);
}, 10);
setInterval(function(){
/* Some long block of code... */
}, 10);
Эти два фрагмента кода могут быть функционально эквивалентным, сначала взгляд, но это не так. В частности, Код setTimeout всегда будет иметь менее 10 мс после предыдущего (это может закончиться больше, но не меньше), тогда как setInterval попытается выполнять обратный вызов каждые 10 мс независимо от того, когда последний обратный вызов был выполнен.
Интервалы могут выполняться с обратной связью без задержки, если они занимают достаточно много времени для выполнения (дольше указанной задержки).