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

266
Vistas
Comprender las funciones de orden superior en JS: ¿cómo garantiza el siguiente código que el código solo se llamará una vez?

Estoy tratando de entender la programación funcional y vi el siguiente ejemplo:

 function onceOnly(f) { var hasRun = false; return function() { if(!hasRun){ hasRun = true; return f(); } } } // Call as many times as you like var sendWelcomeEmail = onlyOnce(function() { emailServer.send(...); });

Hay algunas cosas que no entiendo sobre esto.

  • Esta técnica debería garantizar que emailServer.send(...) se llamará solo una vez. ¿Cómo lo hace? ¿Cómo se guarda el estado de hasRun ?
  • ¿Sirve de algo crear una función que devuelva f() dentro onceOnly(f) ? ¿Por qué no hicimos simplemente lo siguiente?
 function onceOnly(f) { var hasRun = false; if(!hasRun){ hasRun = true; return f(); } }

La fuente de este código se puede encontrar aquí

Gracias.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El objetivo de onlyOnce es devolver una función, no llamar a una función. Su segundo ejemplo es llamar a la función y devolver el resultado de f .

Considerando que, con la primera implementación

 //return a reference to an anonymous function var sendWelcomeEmail = onlyOnce(...); //you can use it to call after sendWelcomeEmail();

Simplemente coloque un console.log() justo antes de return f() y verá la diferencia.

hasRun se inicia primero con false . Una vez que se llama a sendWelcomeEmail() , hasRun se establecerá en true . Dado que sendWelcomeEmail hace referencia a una función anónima, es única y existe en la memoria, una segunda llamada a esta misma función no activará f() porque hasRun también tiene una referencia única y se memoriza.

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