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

77
Vistas
cierre antirrebote compartido por dos funciones

Estoy implementando la función de rebote. y pude escribir con éxito la función, entonces me vino a la mente un pensamiento confuso.

 function debounce(fn, timeout) { let timeoutRef; return function (...args) { const context = this; function cb() { fn.apply(context, args); } clearTimeout(timeoutRef); timeoutRef = setTimeout(cb, timeout); }; } function foo() { console.log('foo is called'); } function bar() { console.log('bar is called'); } const debouncedFoo = debounce(foo, 10000); const debouncedBar = debounce(bar, 2000); debouncedFoo(); debouncedBar();

en el código anterior, ¿ debouncedFoo y debouncedBar no comparten la misma variable colsure timeoutRef?

si ese es el caso cuando debouncedFoo() asigna la referencia de llamada setTimeout a la variable timeoutRef. Y más tarde, cuando se llame a debouncedBar(), se debe borrar la llamada anterior timeoutRef establecida por debouncedFoo() y se debe asignar una nueva referencia de llamada setTimeout.

En conclusión,

Resultado Esperado:

 bar is called

resultado actual:

 foo is called bar is called

¿Puede alguien por favor ayudarme a entender esto?

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

0

en el código anterior, ¿debouncedFoo y debouncedBar no comparten la misma variable de cierre timeoutRef?

No, no comparten el mismo cierre. de hecho, los parámetros de función "fn" y "timeout" también están limitados en el alcance de cierre, lo que significa que hay un parámetro que está limitado en el alcance de cierre

  1. fn
  2. se acabó el tiempo
  3. tiempo de esperaRef

y debido a que está llamando a la función de rebote 2 veces, cada persona que llama tiene su propia pila local y cierre local. otra cosa que es importante es clearTimeout(timeoutRef); aquí el valor timeoutRef no está definido, por lo que no funcionará

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