防抖函數(shù)
你盡管觸發(fā)事件,但是我一定在事件觸發(fā) n 秒后才執(zhí)行,如果你在一個事件觸發(fā)的 n 秒內(nèi)又觸發(fā)了這個事件,那我就以新的事件的時間為準(zhǔn),n 秒后才執(zhí)行,總之,就是要等你觸發(fā)完事件 n 秒內(nèi)不再觸發(fā)事件,我才執(zhí)行
實現(xiàn)
function debounce(fn){
let timeout = null;
return function(){
clearTimeOut(timeout)
setTimeOut(() =>{
fn.apply(this,arguments)
},500)
}
}
節(jié)流函數(shù)
防抖動和節(jié)流是不一樣的.本質(zhì)上,防抖動是將多次執(zhí)行變成最后一次執(zhí)行.節(jié)流是將多次執(zhí)行變成每隔多久執(zhí)行一次.減少函數(shù)執(zhí)行頻率.
實現(xiàn)
function throttle(fn){
let canRun = true;
return function(){
if(!canRun) return;
canRun = false;
setTimeOut(() => {
fn.apply(this,argument)
canRun = true;
},500)
}
}