Estoy aprendiendo JavaScript y agregué un código JavaScript en Chrome Dev Tools o JavaScript Console para retrasar o bloquear el clic en cualquier botón en un sitio web en una cantidad de segundos. Y funcionó como se esperaba. Sin embargo, ese clic se activó automáticamente después de un par de segundos. ¿Por qué podría ser eso? ¿JavaScript tiene una cola de detectores de eventos que verifica constantemente si hay alguno de ellos y actúa sobre esos eventos?
function hang(secs) { const doneAt = Date.now() + (secs * 1000) while (Date.now() < doneAt) {} } hang(10)Su bucle while bloqueará todo lo demás que esté haciendo el navegador durante el tiempo solicitado. Es probable que active la ventana emergente de advertencia "El script está tardando demasiado". No es así como implementas retrasos en JavaScript. Si desea retrasar la reacción a las interacciones del usuario, use los mecanismos de temporizador ( setTimeout() etc.).
En cuanto a su pregunta específicamente, los eventos, de hecho, se ponen en cola, pero nada los "controla constantemente"; sucede un evento, y ese simple hecho hace que una acción se ponga en cola. Mientras se ejecuta el ciclo de quema de CPU, no se pueden realizar envíos de controladores de eventos. Una vez que finaliza la función, se enviarán los controladores de eventos. El entorno de JavaScript es de un solo subproceso.