Sobes.tech
Junior

Como funciona a função setTimeout em JavaScript?

sobes.tech IA

Resposta da IA

setTimeout planeia a execução de uma função ou fragmento de código após o número especificado de milissegundos.

Ao chamar setTimeout, o navegador (ou o ambiente de execução Node.js) cria um temporizador. A função passada para setTimeout é colocada na fila de tarefas (task queue) após o tempo de atraso especificado.

JavaScript é de thread única. O thread principal de execução (main thread) executa o código sequencialmente. Quando o thread principal termina as tarefas atuais, verifica a fila de tarefas. Se houver funções na fila (por exemplo, aquelas adiadas com setTimeout) e o thread principal estiver livre, ele extrai a primeira função da fila e a executa.

Isso significa que setTimeout(fn, 0) não garante a execução imediata de fn. Ela será executada o mais rápido possível, mas apenas após a conclusão do código atual no thread principal.

Sintaxe:

setTimeout(function, milliseconds, param1, param2, ...);
  • function: A função a ser executada.
  • milliseconds: O número de milissegundos antes de executar a função. Se omitido, o padrão é 0.
  • param1, param2, ...: Argumentos opcionais passados para a função ao chamá-la.

Exemplo:

// Vai mostrar "Olá!" após 2 segundos
setTimeout(function() {
  console.log("Olá!");
}, 2000);

// Passando argumentos
function mostrarMensagem(nome) {
  console.log("Olá, " + nome + "!");
}

setTimeout(mostrarMensagem, 1000, "Mundo"); // Vai mostrar "Olá, Mundo!" após 1 segundo

setTimeout retorna um ID numérico do temporizador, que pode ser usado para cancelar a execução agendada com clearTimeout.

Exemplo de uso de clearTimeout:

let timerId = setTimeout(function() {
  console.log("Esta linha não será exibida");
}, 3000);

console.log("Temporizador iniciado...");

// Cancela o temporizador
clearTimeout(timerId);

console.log("Temporizador cancelado.");

Pontos importantes:

  • O atraso não é garantido exatamente, especialmente sob cargas altas no thread principal. O tempo indicado é o atraso mínimo antes de colocar a função na fila de tarefas.
  • Em Node.js, os temporizadores são gerenciados pelo ciclo de eventos (event loop), semelhante ao navegador.