/**
* 函数防抖
* @param {function} fn 执行函数
* @param {number} delay 延迟时间 毫秒
* @param {boolean} immediately 是否立刻执行函数
*/
function debounce(fn,delay,immediately){
var timer = null,firstInvoke=true;
return function(){
if(timer) {
console.log('操作过于频繁');
clearTimeout(timer);
}
if(immediately && firstInvoke){
fn.apply(this,arguments);
firstInvoke=false;
return;
}
timer=setTimeout(()=>{
fn.apply(this,arguments);
timer=null;
firstInvoke=true;
},delay);
}
}
/**
* 函数节流
* @param {function} fn 执行函数
* @param {number} wait 等待时间 毫秒
* @param {boolean} immediately 是否立刻执行函数
*/
function throttle(fn,wait,immediately){
if(immediately){
var executetime;
return function(){
//首次执行 或者 距离上次执行的时间超过等待时间
if(!executetime ||Date.now()-executetime>=wait){
fn.apply(this,arguments);
executetime=Date.now();//记录本次执行时间
}
}
}else{
var timer;
return function () {
if(timer) return;
timer=setTimeout(()=>{
fn.apply(this,arguments);
timer=null;
},wait);
}
}
}