0
   debounceFunction() {
        let timeout = setTimeout(() => {
            doSomething();
            flag = true;
            clearTimeout(timeout);
        }, 250);
    }

我写了一个类似上面的去抖动函数,当一个事件被触发时,我多次调用了这个函数。我的问题是, setTimeout结束时的 clearTimeout是否有意义?

最好的方法是什么?

提前致谢 :)

4

3 回答 3

0

setTimeout 结束时的 clearTimeout 是否有意义?

clearTimeout不,从回调中调用是没有意义的setTimeout——已经太晚了。您无法清除任何内容,超时已经发生。

clearTimeout当您想阻止回调在此发生之前被调用时使用。

最好的方法是什么?

只是省略它。

如果您询问最佳的编写方式debounce,请参阅Can有人解释 Javascript 中的“去抖动”功能

于 2018-03-14T08:06:07.010 回答
0

我的问题是,setTimeout 结束时的 clearTimeout 是否有意义?

不,clearTimeout用于清除之前创建的超时,所以clearTimeout 应该在之前完成setTimeout以取消之前的setTimeout.

最好的方法是什么?

看看大卫沃尔什的帖子SO 问题

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);
    };
};
于 2018-03-14T08:07:30.890 回答
0

clearTimeout() 阻止执行 setTimeout() 设置的函数;在去抖动中,用户被要求在一个时间间隔内执行有限的动作。因此,我们在 setTimeout 内的函数内设置该操作,并且每当用户尝试在给定的时间间隔内执行相同的操作时,我们调用 clearTimeout 来阻止用户执行此操作。所以 clearTimeout 应该在 SetTimeout 之前调用。

于 2020-08-07T07:03:18.040 回答