在进行去抖动时,clearTimeout的重点是什么?

时间:2018-03-14 07:17:17

标签: javascript settimeout cleartimeout debounce

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

我写了一个与上面类似的去抖功能,我在触发事件时多次调用此函数。我的问题是, setTimeout 末尾的clearTimeout是否有意义?

这样做的最佳方法是什么?

提前致谢:)

3 个答案:

答案 0 :(得分:0)

  

setTimeout末尾的clearTimeout是否有意义?

不,没有必要在clearTimeout回调中拨打setTimeout - 已经太晚了。你无法清除任何事情,超时已经发生。

如果您希望阻止回调在之前被调用,则会使用

clearTimeout

  

这样做的最佳方法是什么?

只是省略它。

如果您询问撰写debounce的最佳方式,请参阅Can someone explain the "debounce" function in Javascript

答案 1 :(得分:0)

  

我的问题是,clearTimeout是否在setTimeout的末尾   有道理吗?

不,clearTimeout用于清除之前创建的超时,因此clearTimeout 应在setTimeout之前完成,以取消之前setTimeout的调用

  

这样做的最佳方法是什么?

查看David Walsh's postSO question

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);
    };
};

答案 2 :(得分:0)

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