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

112
Visualizações
Usando setInterval dentro de los cierres de javascript

Soy nuevo en javascript y estoy leyendo sobre cierres actualmente. Estaba tratando de implementar un ejemplo para comprender mejor el concepto.

Este es el fragmento:

 function getValue() { let a = 0 const runner = async () => { a += 1 } setInterval(runner, 100) return () => { return a } } let value = getValue() console.log(value()) -----> logging statement 1 // some long operation console.log(value()) -----> logging statement 2

Sin embargo, la salida que veo es:

 1 1

Esperaba que las dos declaraciones de registro generaran dos valores diferentes. Tengo entendido que una vez que se llama a getValue() , la runner de ejecución se ejecutaría a intervalos regulares. La variable a se actualizaría y, por lo tanto, el segundo console.log debería haber impreso un valor incrementado de a .

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Estás casi allí, excepto que te perdiste la parte principal.

Las operaciones están ocurriendo demasiado rápido. No se necesitan 100 milisegundos para ejecutar la segunda iteración, por lo que el valor sigue siendo el mismo.

Intente esperar al menos 100 milisegundos ya que el intervalo que tiene necesita esa cantidad de tiempo para incrementarse.

Como se muestra en el siguiente ejemplo.

 function getValue() { let a = 0 const runner = async () => { a += 1 } setInterval(runner, 100) return () => { return a } } let value = getValue() console.log(value()) // operations are happening too fast setTimeout(() => console.log(value()), 100); setTimeout(() => console.log(value()), 200); setTimeout(() => console.log(value()), 300);

about 4 years ago · Juan Pablo Isaza Relatório

0

function getValue() { let a = 0 const runner = () => { a += 1 console.log("Runner's A: " +a) } setInterval(runner, 100) return () => { return a } } let value = getValue() console.log(value());// -----> logging statement 1 // some long operation console.log(value());// -----> logging statement 2

https://jsbin.com/geponejuba/edit?js,consola,salida

como se señaló anteriormente, js tiene un solo subproceso, por lo que la forma en que funciona es que sus declaraciones de registro se ejecutan primero y, si no hay nada más que hacer, se ejecutan setTimeout/setInterval (esta es una declaración extremadamente simplificada, puede leer sobre "Bucle de eventos" para una versión detallada)

en el ejemplo jsbin que compartí, puede ver que se llama a setInterval y, de hecho, está actualizando el valor.

about 4 years ago · Juan Pablo Isaza 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