一圖秒懂函數防抖和函數節流

函數防抖(debounce)和函數節流(throttle)都是爲了緩解函數頻繁調用,它們類似,但有區別bash

如上圖,一條豎線表明一次函數調用,函數防抖是間隔超過必定時間後纔會執行,函數節流是必定時間段內只執行一次。app

函數防抖實現

function debounce(fn, delay) {
  let timer = null;
  return function () {
    if (timer) clearTimeout(timer);
    timer = setTimeout(() => {
      fn.apply(this, arguments);
    }, delay);
  }
}
複製代碼

函數節流實現

function throttle(fn, cycle) {
  let start = Date.now();
  let now;
  let timer;
  return function () {
    now = Date.now();
    clearTimeout(timer);
    if (now - start >= cycle) {
      fn.apply(this, arguments);
      start = now;
    } else {
      timer = setTimeout(() => {
        fn.apply(this, arguments);
      }, cycle);
    }
  }
}
複製代碼

lodash對這兩個方法的實現更靈活一些,有第三個參數,能夠去參觀學習。函數

最後

歡迎關注個人微博@狂刀二學習

相關文章
相關標籤/搜索