项目中常用在函数防抖,其中fn.apply(this,arg) 是指新函数debounce会继承传入fn的属性和方法
// 函数防抖,频繁操作中不处理,直到操作完成之后(再过 delay 的时间)才一次性处理
function debounce(fn, delay) {
delay = delay || 200;
var timer = null;
return function() {
var arg = arguments;
// 每次操作时,清除上次的定时器
clearTimeout(timer);
timer = null;
// 定义新的定时器,一段时间后进行操作
timer = setTimeout(function() {
fn.apply(this, arg);
}, delay);
}
};
var count = 0;
// 主体
function scrollHandle(e) {
console.log(e.type, ++count); // scroll
}
// 代理
var proxyScrollHandle = (function() {
return debounce(scrollHandle, 500);
})();
window.onscroll = proxyScrollHandle;
另外一种防抖使用
this.limitFun = function(fun, limitTime) {
limitTime = limitTime || 1000;
return function (e) {
var lastTime = $(this).data('lastTime');
var nowTime = Date.now() || new Date().getTime();
if (!lastTime || nowTime - lastTime > limitTime) {
fun.call(this, e);
$(this).data('lastTime', nowTime);
}
}
};