最近在准备面试问题,节流防抖,看了很多博客,立即执行版一些博客写的有点问题,现将自己总结写的发出来,欢迎大家交流。
//立即执行版
function debounce(fn, delay, immediate = false) {
var timer = null;
return function() {
if(timer) clearTimeout(timer);
var _this = this;
var _arguments = arguments;
//判断是否需要立即执行
if(immediate) {
fn.apply(_this, _arguments);
immediate = false;
//如果在一个事件触发的delay毫秒内没有再触发事件,在下一批事件中需要首次执行
timer = setTimeout(function() {
immediate = true;
}, delay);
} else {
//延迟执行
timer = setTimeout(function() {
fn.apply(_this, _arguments);
immediate = true;
}, delay);
}
}
}
参考