El tiempo de ejecución de JS es un contenedor que incluye todas las piezas diferentes para ejecutar JavaScript: motor JS, entorno de API web, cola de devolución de llamada, cola de microtareas, bucle de eventos.
Entonces, cada código síncrono se ejecuta en el motor JS que es Call Stack y cada código asíncrono se ejecuta en el entorno de API web (tiempo de espera, DOM, recuperación).