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

246
Vistas
¿Cómo hacer una variable estática en JavaScript como lo hacemos en c? (para evitar la reinicialización de la variable)

Vi este video en https://www.youtube.com/watch?v=cjIswDCKgu0&t=429s YouTube;

Solo quería hacer una función de rebote simple. pero este código no funciona en mi dispositivo según lo previsto. Por favor ayuda.


let debounceTimes = 0; // this code does not work as intended let timeout; // if I make it global it works just fine // but I don't want to do that for obvious reasons function debounce(cb, delay = 100) { // let timeout; // this is being reinitialized // only if I could do something like this // static timeout; // to avoid re-initializing the variable // return (...args) => { clearTimeout(timeout); timeout = setTimeout(() => { cb(); }, delay); // } } window.addEventListener("mousemove", () => { // console.log("hello"); // document.getElementById("debounce").innerText++; debounce( () => { debounceTimes++; document.getElementById("debounce").innerText = String(debounceTimes); }, 100); });
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

En este ejemplo, no es posible, ya que cuando se activa el evento, solo ejecuta la función de debounce que crea la variable interna. Para evitar reinicializar la variable, puede:

  1. Crear variable en el alcance global

  2. Cree otra función que devuelva la función de rebote (para que el tiempo de espera esté oculto en el alcance de la función)

 let debounceTimes = 0; function getDebounce() { let timeout; function debounce(cb, delay = 100) { clearTimeout(timeout); timeout = setTimeout(() => { cb(); }, delay); } return debounce; } const debounce = getDebounce(); window.addEventListener('mousemove', () => { debounce(() => { debounceTimes++; document.getElementById('debounce').innerText = String(debounceTimes); }, 100); });
about 4 years ago · Juan Pablo Isaza Denunciar

0

Un buen patrón en JS cuando desea que una variable sea privada para una función, pero aún fuera de su alcance, es usar cierres e IIFE :

 const debounce = (function() { let debounceTimes = 0; let timeout; // if I make it global it works just fine // but I don't want to do that for obvious reasons return (cb, delay = 100) => { clearTimeout(timeout); timeout = setTimeout(() => { cb(); console.log("Count:", debounceTimes) debounceTimes++ }, delay); } })() window.onmousemove = () => debounce(() => console.log("Debounced"),200)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Terminé creando una clase con método estático y variables, ya que era similar a las formas de hacer las cosas de C++. pero me gusta más la respuesta de @Tomasz Staszkiewicz. Hizo otra función dentro de la función para lograr esto.

 class ignoreInput { static #timeout; static debounce (cb, delay = 100) { clearTimeout(this.timeout); this.timeout = setTimeout(() => { cb(); } , delay); } static throttle (cb, delay = 100) { // some code } };
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