防抖
理解带参数的时候需要将参数也进行包装,在加工为防抖函数的时候,我们返回的就是一个函数。此函数我们可能传入参数,而这个参数我们是想作为不加工之前函数的参数,所以我们需要使用...arguments
配置好这个参数。所以在调用fn时我们使用.call将其的this
绑定到fn,并且将参数通过arguments绑定。
function debounce(fn,delay){
let timer = null
return function(){
clearTimeout(timer)
timer = setTimeout(()=>{
fn.call(this,...arguments)
},delay)
}
}
节流
arguments绑定和防抖是类似的。
function throttle(fn,delay){
let lastTime = 0
return function(){
let nowTime = new Date().getTime()
if(nowTime - lastTime > delay){
fn.call(this,...arguments)
lastTime = nowTime
}
}
}