節流閥和去抖動的基本實現

節流閥throttle

觸發的事件以週期的形式去執行,而非實時。如滴水的水龍頭。javascript

function throttle (fn, delay) {
  // 利用閉包變量時效性
  let timeout
  let arg
  return function () {
    arg = arguments
    if (!timeout) {
      timeout = setTimeout(() => {
        fn.apply(this, arg)
        timeout = null
      }, delay)
    }
  }
}
// demo
/*
var test = throttle(function (a) {console.log(a)}, 1000)
test(1) // 不執行
test(2) // 不執行
test(3)
=> 3
test = null // 不須要時釋放內存
*/

去抖動debounce

事件最後一次觸發的N毫秒後觸發,如電梯門。java

function debounce (fn, delay){
  let timeout
  return function(){
    const args = arguments
    clearTimeout(timeout)
    timeout = setTimeout(() => {
      fn.apply(this, args)
    }, delay)
  }
}
// 用法同throttle
相關文章
相關標籤/搜索