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