gpt4 book ai didi

javascript - 在事件监听器内的匿名函数内运行函数

转载 作者:行者123 更新时间:2023-11-30 11:00:54 24 4
gpt4 key购买 nike

刚刚研究去抖动功能,发现这段代码似乎可以解决问题:

$(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 inside 事件监听器。 debounce 返回一个函数,但您永远不会调用它:with

debounce(searchUsers, 450);

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

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

之后不再使用 someVar

debounce 调用(返回您想要作为事件监听器的函数)直接传递到 addEventListener 中:

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

关于javascript - 在事件监听器内的匿名函数内运行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57767802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com