Причина setInterval
плоха в том, что он будет пытаться выполнять код каждую X MS независимо от того, что происходит в потоке. Так что если у вас есть:
setInterval( complexFunction, 1 ); // complexFunction takes >1 MS to complete
... вы можете в конечном итоге setInterval
попытаться повторно выполнить несколько раз, прежде чем даже его собственный код будет завершен! Однако вы можете использовать setTimeout
аналогичным образом и избежать этой проблемы:
setTimeout( complexFunction, 1 );
function complexFunction() {
// complex code
setTimeout( complexFunction, 1 );
}
... теперь complexFunction
будет вызывать себя снова только после того, как его собственный код будет завершен, поэтому, если для завершения его собственного кода требуется больше 1 мс, у вас не будет никакого отставания, как с setInterval