"setTimeout"VS"debounce"插件 - 推迟事件上的代码执行

zit*_*tix 4 javascript jquery jquery-plugins debouncing

我想推迟在事件上执行一些代码.使用标准setTimeout功能和插件去抖(链接到去抖动)之间究竟有什么区别?

这是一个例子 setTimeout:

var timeout;
$(window).on("scroll", function() {

    clearTimeout(timeout);
    timeout = setTimeout(function() {

        doSomethingFunction();

    }, 500);

});
Run Code Online (Sandbox Code Playgroud)

这是debounce的一个例子:

$(window).on("scroll",

    $.debounce(500, doSomethingFunction)

);
Run Code Online (Sandbox Code Playgroud)

当然,对于去抖,代码更短但是还有其他好处吗? 哪一个会更快?

use*_*501 6

debouncesetTimeout内部使用,因此差异与setTimeout被触发的次数有关.

debounce限制它发射的次数setTimeout.如果在短时间内发送多个请求,则只会有一个请求通过.

var timeout_id = setTimeout(
    debounce_mode ? clear
    : exec, debounce_mode === undefined ? delay - elapsed
    : delay
);
Run Code Online (Sandbox Code Playgroud)

您可以查看源代码以获取更多信息.

该插件将通过设置超时ID来处理超时.