Pregunta

Diga que tengo el siguiente código:

function testA {
   setTimeout('testB()', 1000);
   doLong();
}

function testB {
   doSomething();
}

function doLong() {
   //takes a few seconds to do something
}

Yo ejecuto testA(). He leído que JavaScript es un solo hilo. Lo que sucede después de 1000 milisegundos, cuando el tiempo de espera para testB() ¿es alcanzado?

Algunas posibilidades que puedo pensar:

  • testB() está en cola para ejecutar después doLong() Y cualquier otra cosa que llamó ha terminado.
  • doLong() se termina de inmediato y testB() Está empezado.
  • doLong() se da un poco más de tiempo para ejecutarse antes de detenerse (ya sea automáticamente o después de solicitar al usuario) y testB() Está empezado.
  • doLong() se detiene, testB() Está empezado. Después testB() ha terminado, doLong() currículums.

¿Cuál es la respuesta correcta? ¿Es dependiente de la implementación o parte del estándar?*

Esta pregunta es similar pero no lo mismo, por lo que puedo decir.

Se agradecería cualquier enlace que pueda recomendar para comprender mejor la ejecución de JavaScript.

¡Gracias!

*Sí, sé que no todos los navegadores siguen los estándares :(

¿Fue útil?

Solución

La primera de tus conjeturas es la correcta:testB() is queued up to execute after doLong() and anything else it called have finished.

Si toma más de un segundo para testA para terminar, testB Simplemente tendrá que esperar.

Además, debes escribir setTimeout(testB, 1000) más bien que setTimeout('testB()', 1000). Enviar una cadena a setTimeOut es, como usar eval, Generalmente considerado malvado y te hará enemigos;)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top