debounceFunction() {
let timeout = setTimeout(() => {
doSomething();
flag = true;
clearTimeout(timeout);
}, 250);
}
我写了一个与上面类似的去抖功能,我在触发事件时多次调用此函数。我的问题是, setTimeout 末尾的clearTimeout是否有意义?
这样做的最佳方法是什么?
提前致谢:)
答案 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 post和SO 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。