-1

我构建了一个 JavaScript debounce 函数,如果这是正确的方法,我需要 JavaScript 专家的意见,如果不是,那么当前函数的缺陷是什么。提前感谢您的意见,这将有助于我学习。

var debounce = function(inpFun, wait) {
    var timeout;
    return function () {
        if(!timeout) {
            inpFun.apply(this, arguments);
            timeout = setTimeout(function() {
                timeout = undefined;
            }, wait);
        }
        else {
            console.log("Debouncing");
        }
    }
};

var buttonClickFunction = debounce(function (event) {
    console.log("Button Clicked");
    console.log(event.target.id);
}, 2000);



document.querySelector("#button1").addEventListener("click", buttonClickFunction);
<button id="button1">Button</button>

4

1 回答 1

0

在我看来,在这种情况下最有用的事情就是看看专业人士做了什么。所以 lodash 和 underscore 都提供了 debounce 的实现,你可以像这样找到它们:

  1. 文档:https ://lodash.com/docs/4.17.10#debounce
  2. 代码:https ://github.com/lodash/lodash/blob/master/debounce.js

如果您想深入了解此类代码,请阅读该文件的提交历史记录,阅读有关第一个链接中节流和去抖动之间区别的博文,并且通常尽可能多地从其他人的努力中吸取教训。

于 2018-07-03T15:18:21.070 回答