当你的事件在不断触发的时候,会根据你设置的间隔时间只触发一次回调
// const f1= debounce(
//你要执行的函数f2
, 500);
当我不断触发键盘事件,如果我触发事件的时间间隔低于500毫秒,则不会调用jj函数,这样限制了频率,就不会对身体不好啦。
用起来倒是很方便,相对应的还有 _.throttle 方法。
接下来我们看看 debounce 的源码吧
_.debounce = function(func, wait, immediate) {
var timeout, args, context, timestamp, result;
var later = function() {
var last = _.now() - timestamp;
if (last < wait && last >= 0) {
timeout = setTimeout(later, wait - last);
} else {
timeout = null;
if (!immediate) {
result = func.apply(context, args);
if (!timeout) context = args = null;
}
}
};
return function() {
context = this;
args = arguments;
timestamp = _.now();
var callNow = immediate && !timeout;
if (!timeout) timeout = setTimeout(later, wait);
if (callNow) {
result = func.apply(context, args);
context = args = null;
}
return result;
};
};