Mi pregunta es una variante de esta pregunta: setTimeout se ejecuta después de bucle en javascript
El código:
let i = 0; setTimeout(() => alert(i), 100); // ? // assume that the time to execute this function is >100ms for(let j = 0; j < 100000000; j++) { i++; }La salida:
100000000 Mi pregunta: sé que cuando usamos setTimeout con un retraso de 100, la API WEB setTimeout() se moverá a la queue del eventloop de eventos y luego entrará en la call stack si está vacía y disponible. Podemos ver que este setTimeout comenzará después de 100ms , así que pensé que tal vez el i value sería algo así como 4000+ o algo así. pero desafortunadamente (con este gran ciclo que toma como 5+- segundos, es decir 5000ms) la función setTimeout se ejecutará justo después de que finalice el for loop . pero el demonio de bucle de eventos se está ejecutando y está listo para aceptar la setTimeout callback porque la call stack está vacía. Sé que el concepto de concurrencia de JS es diferente de los lenguajes como JAVA&C++, etc... que no hay programador para el tiempo de la CPU porque es un lenguaje de subprocesos, pero supongo que el event loop funciona como el OS daemon y está listo para aceptar el message from the queue incluso si la CPU está ocupada con el for loop . Entonces, ¿la razón por la que sucede es porque la CPU está ocupada y no puede ejecutar el eventloop de eventos? o hay otra razón? ¡Gracias chicos!