防抖和節(jié)流的理解以及和閉包的應(yīng)用

共同的一點是兩者都用了閉包,即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));

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 看了《JavaScript高級程序設(shè)計》和網(wǎng)上的一些博客,感覺對函數(shù)節(jié)流和函數(shù)防抖的概念是反的,以下我寫的關(guān)于防抖...
    編程小世界閱讀 770評論 0 1
  • 防抖 觸發(fā)高頻事件后n秒內(nèi)函數(shù)只會執(zhí)行一次,如果n秒內(nèi)高頻事件再次被觸發(fā),則重新計算時間 思路: 每次觸發(fā)事件時都...
    京巴_2cc6閱讀 800評論 0 0
  • 1. 函數(shù) 1.1 函數(shù)的 3 種定義方法 1.1.1 函數(shù)聲明 //ES5 functiongetSum(){}...
    Mrssssss閱讀 456評論 0 0
  • 防抖和節(jié)流是針對響應(yīng)跟不上觸發(fā)頻率這類問題的兩種解決方案 debounce,去抖動。策略是當(dāng)事件被觸發(fā)時,設(shè)定一個...
    皇甫圣坤閱讀 445評論 0 0
  • //1、防抖:規(guī)定一個期限時間,在首次觸發(fā)事件時,不利己執(zhí)行回調(diào)函數(shù),而是在期限時間后在執(zhí)行,如果期限時間內(nèi)回調(diào)函...
    38ae78c953e7閱讀 312評論 1 1

友情鏈接更多精彩內(nèi)容