Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

388
Vistas
¿Está garantizado el orden de las funciones?
let x = 0; function a() { console.log("called a()"); for (let i=0; i<123456789; ++i) { x += Math.sqrt(2); } console.log("x = "+x); } function b() { x = undefined; console.log("called b()"); } setTimeout(b, 20); a();

producción:

 called a() x = 174594265.7306214 called b()

b debería haberse llamado antes, pero esperó hasta que se completó la a .

Sé que js usa solo un hilo, pero el procesador podría haber cambiado entre ejecutar a y b durante a ejecución de a. ¿El procesador siempre ejecuta solo una función a la vez (si no hay una espera interna)? ¿En nodejs y en el sitio web javascript?

EDITAR:
Aquí hay un ejemplo de espera:

 function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } let x = 0; async function a() { console.log("called a()"); await sleep(1000); for (let i=0; i<123456789; ++i) { x += Math.sqrt(2); } console.log("x = "+x); } function b() { x = undefined; console.log("called b()"); } setTimeout(b, 20); a();

producción:

 called a() called b() x = NaN

observe cómo x se convierte en NaN, ya que b se ejecuta durante a

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

b debería haberse llamado antes, pero esperó hasta que se completó la función.

No. b debe llamarse después de que se haya ejecutado su código síncrono porque es cuando se llama a una función pasada a setTimeout .

La función de devolución de llamada de setTimeout está programada para ejecutarse después del retraso que especifique como segundo argumento para setTimeout . Este retraso es la cantidad mínima de tiempo que llevará ejecutar la función de devolución de llamada programada con setTimeout .

Una vez que el temporizador expira, esa función de devolución de llamada se coloca en una cola de tareas y desde allí se envía a la pila de llamadas, PERO solo se envía una vez que la pila de llamadas está vacía.

En su caso, la pila de llamadas estará vacía cuando su secuencia de comandos haya terminado su ejecución.

Sé que js usa solo un hilo, pero el procesador podría haber cambiado entre ejecutar a y b durante la ejecución de a

Eso no es posible con solo 1 hilo. En Javascript, solo se ejecuta una cosa en un momento dado, a menos que use otro hilo .

¿El procesador siempre ejecuta solo una función a la vez (si no hay espera dentro)?

Sí. Incluso con await , la función se detiene hasta que se liquida la promesa. Una vez que se establece la promesa, esa función continúa ejecutándose y en ese momento, nada más se ejecuta.

Editar

observe cómo x se convierte en NaN, ya que b se ejecuta durante un

No, no hay interferencia aquí. La función a se ejecuta sincrónicamente hasta la siguiente instrucción

 await sleep(1000);

Mientras la función a está en pausa, esperando que se establezca la promesa devuelta por sleep(...) , durante este tiempo, la función b se ejecuta porque su temporizador ha expirado y la pila de llamadas está vacía.

Dado que ambas funciones se asignan a la misma variable x , el valor de x es NaN porque su valor antes de que la función a se reanude no está undefined y realizar sumas en undefined conduce a NaN .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda