防抖:在事件被觸發(fā)n秒后再執(zhí)行回調(diào),如果在這n秒內(nèi)又被觸發(fā),則重新計(jì)時(shí)摸柄。
場(chǎng)景:函數(shù)防抖是某一段時(shí)間內(nèi)只執(zhí)行一次。
例如:input輸入框搜索聯(lián)想既忆;
window觸發(fā)resize的時(shí)候驱负,不斷的調(diào)整瀏覽器窗口大小會(huì)不斷的觸發(fā)這個(gè)事件嗦玖,用防抖來讓其只觸發(fā)一次
function debounce(fn, delay){
let timer = null
return function(arguments){
let that = this
if(timer) clearTimeout()
timer = setTimeout(() => {
fn.apply(that, arguments)
},delay)
}
}
節(jié)流:規(guī)定一個(gè)單位時(shí)間內(nèi),只能觸發(fā)函數(shù)一次跃脊。如果單位時(shí)間內(nèi)觸發(fā)多次函數(shù)宇挫,只有一次生效。
場(chǎng)景:鼠標(biāo)不斷點(diǎn)擊觸發(fā)
監(jiān)聽滾動(dòng)事件酪术,例如是否滑到底部自動(dòng)加載更多
function throttle(fn, delay){
let flag = true
return function(){
if(!flag) return
flag = true
setTimeout(() => {
fn.apply(this, arguments)
flag = true
})
}
}