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

369
Visualizações
Vue.js: ¿por qué mi función de rebote no funciona con la función de flecha?

Aquí está mi función de rebote:

 function debounce(fn, wait = 1500) { let timeout; return function (...args) { if (timeout) clearTimeout(timeout); let context = this; timeout = setTimeout(function () { fn.apply(context, ...args); }, wait); }; }

Aquí está mi method en el componente:

 methods: { onKeyUp() { if(this.q.length) this.isLoading = true; // show loading spinner return debounce(() => this.querySearch())() },

Así que tengo que ejecutar la llamada de rebote con un conjunto adicional de () que tiene sentido, porque el rebote devuelve una función. Ahora, si lo cambio a esto:

 methods: { onKeyUp: debounce(function() { this.querySearch() })

No entiendo por qué esto funciona: debounce devuelve una función. Esperaría que cuando se onKeyUp , se ejecute debounce , que solo devuelve una función, sin siquiera ejecutarla. ¿Ejecuta implícitamente la función devuelta con esta sintaxis? ¿Por qué?

Además, ¿por qué necesita ser una función sin flecha en el segundo ejemplo? Sé que en el primer ejemplo desea una flecha fn porque desea this apunte al contexto del componente, pero no tengo claro por qué el uso de esta sintaxis de clave-valor lo desglosa aquí.

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

0

debounce(function() {...}) es una expresión. onKeyUp se asigna al resultado de su evaluación. El resultado de la llamada debounce es una función antirrebote, al igual que onKeyUp .

Esperaría que cuando se active onKeyUp, se ejecute el rebote

Así no es como funciona JavaScript. Dado var foo = 1 + 1 , 1 + 1 se evalúa ansiosamente a 2, no en el momento en que se accede a la variable foo . La única posibilidad de que el código se evalúe de forma perezosa es envolverlo dentro de una función. Esto es lo que sucede en caso de debounce . El código dentro de function() {...} se llama después de un retraso cuando se llama a la función antirrebote. debounce se llama cuando se llama.

Además, ¿por qué necesita ser una función sin flecha en el segundo ejemplo?

Porque esta es la única forma en que la función puede obtener una instancia de componente como this . Dado que las flechas no tienen su propio contexto, this se referiría al contexto externo con una flecha, que es el contexto del módulo en el que se define el componente:

 onKeyUp: debounce(() => {...})

y

 onKeyUp: () => {...}
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