共同的一點是兩者都用了閉包,即return函數(shù)內(nèi)部使用外部函數(shù)的方式。
防抖是每次都執(zhí)行函數(shù),使用清除每次的執(zhí)行,最后一次執(zhí)行函數(shù)。
節(jié)流是定義一個布爾變量通過變量的狀態(tài)的是否改變只執(zhí)行一次函數(shù)。
防抖:
functiondebounce(fn,wait) {
vartimeout =null;// 創(chuàng)建一個標(biāo)記用來存放定時器的返回值
returnfunction() {
clearTimeout(timeout);//清除定時器
//創(chuàng)建新的 setTimeout
timeout =setTimeout(function(){
fn();
? ? ? ? }, wait);
? ? };
}
// 處理函數(shù)
functionhandle() {
console.log(document.getElementById("kw").value);
}
//輸入框事件
document.getElementById("kw").addEventListener('input',debounce(handle,5000));
節(jié)流:
functionthrottle(fn,delay){
varcanRun=true;//通過閉包保存該變量
returnfunction(){
if(!canRun)return;//立刻返回
canRun=false;
setTimeout(function(){
fn();
canRun=true;
? ? ? ? ? ? },delay);
? ? ? };
}
functionhandle(){
console.log(123);
}
window.addEventListener("scroll",throttle(handle,2000));