一图秒懂函数防抖和函数节流

函数防抖(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对这两个方法的实现更灵活一些,有第三个参数,能够去参观学习。函数

最后

欢迎关注个人微博@狂刀二学习

相关文章
相关标签/搜索