DEV Community

Alisson F.
Alisson F.

Posted on

setTimeout vs setInterval — Evite bugs comuns no JavaScript

setTimeout e setInterval parecem simples, mas escondem pegadinhas comuns que já derrubaram muito código por aí.

Hoje, você vai entender de vez quando usar cada um — e evitar os bugs invisíveis que eles podem causar.


🧠 Diferença básica

setTimeout(fn, delay);
// Executa APENAS UMA VEZ após o delay
Enter fullscreen mode Exit fullscreen mode
setInterval(fn, delay);
// Executa INFINITAMENTE a cada delay
Enter fullscreen mode Exit fullscreen mode

⛔ Problemas comuns

❌ Usar setInterval sem controle

setInterval(() => {
  console.log('Executando...');
}, 1000);
Enter fullscreen mode Exit fullscreen mode

Se você esquecer do clearInterval(), esse código nunca para. E se você chamar ele várias vezes? Vai ter múltiplas execuções simultâneas — e talvez nem perceba.

✅ Melhor com setTimeout + recursão

function loopControlado() {
  console.log('Executando...');
  setTimeout(loopControlado, 1000);
}

loopControlado();
Enter fullscreen mode Exit fullscreen mode

Com isso, você controla melhor a execução e evita intervalos sobrepostos.


⚙️ Quando usar cada um

Caso de uso Use
Executar uma vez após um tempo setTimeout
Criar uma animação leve setTimeout (recursivo)
Intervalos constantes e previsíveis setInterval (com clearInterval)
Atualizar UI a cada segundo (temporariamente) setInterval + clearInterval

💡 Alternativa moderna

requestAnimationFrame(() => {
  // executa antes do próximo repaint
});
Enter fullscreen mode Exit fullscreen mode

Ótimo para animações mais suaves. Ele pausa quando a aba fica inativa, economizando performance.


💬 E você?

Já deixou um setInterval rodando sem perceber?

Ou já viu o navegador travar por conta disso? 😅

Conta aqui nos comentários 👇


Top comments (0)