decir que tengo el siguiente código:para la ejecución de Javascript con setTimeout()
function testA {
setTimeout('testB()', 1000);
doLong();
}
function testB {
doSomething();
}
function doLong() {
//takes a few seconds to do something
}
ejecuto testA()
. He leído que Javascript tiene un único subproceso. ¿Qué sucede después de 1000 milisegundos, cuando se alcanza el tiempo de espera para testB()
?
Algunas de las posibilidades que se me ocurren:
testB()
se ponen en cola para ejecutar despuésdoLong()
y cualquier otra cosa que llamó han terminado.doLong()
se termina inmediatamente y se iniciatestB()
.doLong()
se le da un poco más de tiempo para ejecutar antes de ser detenido (ya sea automáticamente o después de preguntar al usuario) y se iniciatestB()
.doLong()
está en pausa,testB()
se pone en marcha. Después de que se haya terminadotestB()
, se reanudadoLong()
.
¿Cuál es la respuesta correcta? ¿Es dependiente de la implementación o parte del estándar? *
This question es similar pero no es lo mismo, por lo que puedo ver.
Cualquier enlace que se puede recomendar para una mejor comprensión ejecución de Javascript sería apreciada.
Gracias!
* Sí, ya sé que no todos los navegadores siguen los estándares :(
que llegaron a creer 'setTimeout (function() {TESTB(); }, 1000); 'es la mejor manera, ¿me engañaron? –
@Shadow Wizard: Sí, bastante mal. Por lo que yo sé, no hay diferencia entre tu camino y el mío (excepto que el mío es más corto, por supuesto: D). Para ilustrar, imagine si sacamos su expresión en una variable: 'var f = function() {testB(); }; setTimeout (f, 1000); '. Sigue teniendo el mismo significado, pero ahora puedes ver la redundancia. – Jakob
Gracias, tanto por la respuesta como por el consejo sobre pasar una función a setTimeout en lugar de una cadena. Parece que los tutoriales que he estado leyendo son un poco dudosos;) –