function debounce(fn,wait,immediate){
let timer = null
return function (){
let args = arguments
let context = this
if(immediate && !timer){
fn.apply(context,args)
}
if(timer) clearTimeout(timer)
timer = setTimeout(()=>{
fn.apply(context,args)
},wait)
}
}
function throttle(fn,wait,immediate){
let timer = null
let callNow = immediate
return function () {
let args = arguments
let context = this
if(immediate){
fn.apply(context,args)
callNow = false
}
if(!timer){
timer = setTimeout(()=>{
fn.apply(context,args)
timer = null
},wait)
}
}
}