在事件侦听器中的匿名函数中运行函数

道伊

刚开始使用反跳功能,发现这段似乎可以解决问题的代码:

$(document).ready(function() {

  function debounce(func, wait, immediate) {
    var timeout;
    return function() {
        var context = this, args = arguments;
        var later = function() {
            timeout = null;
            if (!immediate) func.apply(context, args);
        };
        var callNow = immediate && !timeout;
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
        if (callNow) func.apply(context, args);
    };
  };

  function searchUsers () {
    // some code irrelevant to this question (...)
  };

  var myEfficientFn = debounce(searchUsers, 450);

  document.getElementById("search").addEventListener('input', myEfficientFn);

});

以上似乎很好用。

但是我很好奇我是否可以debounce直接函数传递addEventListener而不是首先函数保存在变量中myEfficentFn

所以我var myEfficientFn = debounce(searchUsers, 450);从代码中删除了一行,并将最后一行更改为:

   getElementById("search").addEventListener('input', function() {
     debounce(searchUsers, 450);
   });

但它停止工作了。为什么?

一定的表现

debounce是一个函数,当调用该函数时,它会返回另一个函数,在事件触发时将调用您原始代码中的另一个函数

  var myEfficientFn = debounce(searchUsers, 450);
  document.getElementById("search").addEventListener('input', myEfficientFn);

相反,在第二个代码中,您是debounce 事件侦听器内部调用的。debounce返回一个函数,但是您永远不会调用它:with

debounce(searchUsers, 450);

您有一个未使用的函数表达式,有点像

const someVar = () => console.log('hi');

someVar以后再也不用了

而是debounce直接调用(返回所需的函数作为事件侦听器)传递给addEventListener

document.getElementById("search").addEventListener('input', debounce(searchUsers, 450));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Event.target意外地成为绑定事件侦听器函数中的文档

for循环未在单值事件侦听器中运行

如果尚未添加侦听器并且侦听器处理程序是匿名函数,则在nodeJS中添加侦听器

JavaScript函数/事件侦听器无法正常运行

事件侦听器中的匿名函数与事件侦听器中的匿名函数

我按钮中的事件侦听器无法正常运行,该函数在click事件之外正常运行,但是当我单击按钮时,该函数不起作用

如何从具有匿名功能的div中删除事件侦听器

函数在添加事件侦听器后运行了太多次

如何在类内的html中添加具有函数回调的事件侦听器?

我无法在对象构造函数中创建事件侦听器来侦听

如何添加侦听器以删除MongoDB中的函数?

有什么方法可以访问在函数中添加了事件侦听器的元素?

使用带有局部作用域变量的匿名函数删除事件侦听器

侦听器函数中的Extjs 4.2参数

jQuery中的单击事件侦听器

为什么mousedown事件侦听器通过函数运行?

阻止函数执行或删除匿名事件侦听器

自定义事件侦听器中的柯里化(部分函数)

如何在没有匿名函数的情况下设置事件侦听器?(不失去范围)

将参数传递给事件侦听器中的方法而不添加匿名函数

带有匿名函数的事件侦听器(typeError ,toggle undefined)

侦听器函数中的 setInterval

Java 中的事件(侦听器)

在事件侦听器中设置的参数化函数调用背后是否存在有效目的?

异步等待函数未在事件侦听器中执行

运行函数的函数 onclick 事件侦听器

如何为多个函数调用删除一个函数中的所有事件侦听器?

<select><option> 事件侦听器中的箭头函数(vanilla JavaScript)

类中的 Javascript 事件侦听器