Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

321
Visualizações
En javascript, ¿por qué el siguiente código no sale del bucle?
let a = true; setTimeout(() => {a = false}, 1000) while(a){console.log(a)}
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Debido a que JS tiene un solo subproceso, setTimeout se ejecutará después de 1000 ms cuando el subproceso no esté ocupado. Dado que este bucle while bloquea el subproceso, la devolución de llamada de setTimeout no tiene tiempo para ejecutarse y, por lo tanto a permanece true para siempre.

Puede encontrar más detalles sobre este tema aquí .

over 4 years ago · Santiago Trujillo Relatório

0

setTimeout es una función asíncrona, la devolución de llamada proporcionada se ejecutará solo cuando la pila de llamadas de JavaScript esté vacía. Como tenemos la condición "while (true)", siempre se ejecutará algo => la pila de llamadas nunca estará vacía => la devolución de llamada setTimeout nunca se ejecutará. Para obtener más información, lea sobre JavaScript Event Loop https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop

over 4 years ago · Santiago Trujillo Relatório

0

Veamos esto paso a paso (si esto se ejecutó en los navegadores): -

 let a = true; setTimeout(() => {a = false}, 1000) while(a){console.log(a)}
  • let a = true; : Inicializaste una nueva variable a como verdadera;

  • setTimeout(() => {a = false}, 1000) : le ha dicho a la API web setTimeout del navegador que ejecute una devolución de llamada ( () => {a = false} ) en la que configuramos a como false después de un mínimo de 1 segundo . Mínimo porque esa devolución de llamada no se ejecutará a menos que la pila de ejecución de JavaScript (aquí es donde todo su código JS se ejecuta sincrónicamente ) esté vacía. Esta devolución de llamada después de 1 se coloca en una cola de eventos y se elimina de la cola solo cuando la pila de ejecución de JavaScript está vacía.

  • while(a){console.log(a)} : Esto se ejecutará sincrónicamente y bloqueará el hilo principal (donde está la pila de ejecución) ya que a siempre es verdadero. Nuestro hilo principal bloqueado significa que completar esta operación es demasiado costoso (tiene sentido ya que es un registro infinito) y, por lo tanto, la pila de ejecución de JavaScript nunca podría estar libre para cualquier devolución de llamada disponible en la cola de eventos . Eso significa que () => {a = false} , aunque esté disponible en la cola de eventos , nunca tendrá la oportunidad de ser eliminado y ejecutado en nuestra pila de ejecución de JavaScript .

La API web del navegador, esta pila de ejecución de JavaScript y la cola de eventos juntos forman nuestro ciclo de eventos para navegadores.

JavaScript es un lenguaje síncrono de subproceso único (¿recuerdas el subproceso principal?). Todo el comportamiento asíncrono que ve en sus aplicaciones o servidores web se debe a las otras partes que forman el bucle de eventos .

También esta es una imagen simplificada de la misma. Hay más divisiones en la cola de eventos, pero eso está más allá del alcance de esta pregunta.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda