防抖 节流

83 阅读1分钟

/**

  • 用闭包维护同一份 timer
  • 防抖是 触发事件后,多次时间后才执行(每次触发都要更新时间)
  • @param {} fn
  • @param {*} delay */

function debounce(fn, delay) { var timer = null return function(...arg) {

    if(timer) {
        clearTimeout(timer)
    }

    timer = setTimeout( ()=> {
        fn(...arg)
        timer = 0
    }, delay)
}

}

function ajax(url) { setTimeout(() => { console.log(url) }, 2000); }

var ajaxFun = debounce(ajax, 1000)

ajaxFun('localhost:3000/user')

/**

  • 维护同一份 timer
  • 节流是 一个固定的时长内,执行一次 , 多次触发无反应 */

function jieLiu(fn, delay) { var timer = null return function(...arg){ if(timer) { return }

    timer = setTimeout(() => {
        fn(...arg)
        timer = null
    }, delay);
}

}

var jieLiuFun = jieLiu(ajax, 2000)

jieLiuFun('这是节流')