No todo en una interfaz ocurre al instante. A veces necesitas esperar un momento antes de actuar: mostrar una confirmación que desaparece sola, lanzar una animación con retardo, simular una carga.
Para eso existe setTimeout.
El primer argumento es la función a ejecutar. El segundo es cuántos milisegundos esperar (1000 ms = 1 segundo).
Importante: setTimeout no bloquea el código que viene después.
El resto del script sigue ejecutándose mientras el temporizador cuenta.
Al pulsar el botón, primero aparece "Enviando mensaje..." y 2 segundos después cambia a "Mensaje enviado". Todo sin recargar la página.
clearTimeoutsetTimeout devuelve un id que puedes usar para cancelarlo si cambias de planes antes de que se ejecute:
El tiempo que especificas es un mínimo, no una garantía exacta. Si el navegador está ocupado con otra tarea, el callback puede llegar un poco después. Para retardos visibles por el usuario (más de 100ms) esto no importa en la práctica.
setTimeoutclick de #btn-enviar#estado a "Enviando mensaje..."setTimeout para que, 2 segundos después, #estado muestre "Mensaje enviado"setTimeout convierte acciones instantáneas en experiencias con ritmo.