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

110
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 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