La función setTimeout permite ejecutar una función o un bloque de código después de que haya transcurrido un periodo de tiempo específico. En términos sencillos, funciona como un temporizador o una alarma: le dices qué quieres que haga y cuánto tiempo debe esperar antes de hacerlo.
let planificado = setTimeout(funcionAEjecutar, milisegundos);
Cada 1000ms equivale a 1 segundo.
La variable a la cual se asigna el temporizador, guardará un número entero único (un ID). Este identificador es muy importante porque sirve como una "referencia" del temporizador que acabas de programar.
Mucha gente utiliza el setTimeout de forma anónima, como en el ejemplo del juego de memoria, pero si guardas este ID en una variable, podrás usarlo posteriormente para cancelar el temporizador antes de que se ejecute.
Para frenarlo, usamos la instrucción clearTimeout.
clearTimeout(variable_que_guarda_el_temporizador);
A tener en cuenta:
setTimeout no es un tiempo garantizado de ejecución, sino un tiempo mínimo de espera. En conseciencia, si se configuras un retraso de 3000 milisegundos (3 segundos), pero el procesador está muy ocupado realizando un cálculo pesado en el segundo 3, tu función podría tardar 3.5 o 4 segundos en ejecutarse.setTimeout, la función crea un identificador interno. Es por esto que se guarda en una variable: para poder detenerlo en cualquier momento antes de su ejecución, con clearTimeout.