防抖和节流 及其实现

防抖函数

你尽管触发事件,但是我一定在事件触发 n 秒后才执行,如果你在一个事件触发的 n 秒内又触发了这个事件,那我就以新的事件的时间为准,n 秒后才执行,总之,就是要等你触发完事件 n 秒内不再触发事件,我才执行

实现

function debounce(fn){
    let timeout = null;
    return function(){
          clearTimeOut(timeout)
          setTimeOut(() =>{
                fn.apply(this,arguments)
          },500)
    }
}

节流函数

防抖动和节流是不一样的.本质上,防抖动是将多次执行变成最后一次执行.节流是将多次执行变成每隔多久执行一次.减少函数执行频率.

实现

function throttle(fn){
    let canRun = true;
    return function(){
          if(!canRun) return;
          canRun = false;
          setTimeOut(() => {
                fn.apply(this,argument)
                canRun = true;
          },500)
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 最近和前端的小伙伴们,在讨论面试题的时候。谈到了函数防抖和函数节流的应用场景和原理。于是,想深入研究一下两者...
    youthcity阅读 23,706评论 5 78
  • 在前端开发的过程中,我们经常会需要绑定一些持续触发的事件,如 resize、scroll、mousemove 等等...
    Grace_feb3阅读 403评论 0 0
  • 本篇课题,或许早已是烂大街的解读文章。不过春招系列面试下来,不少伙伴们还是似懂非懂地栽倒在(~面试官~)深意的笑容...
    以乐之名阅读 1,822评论 0 9
  • 在前端开发的过程中,我们经常会需要绑定一些持续触发的事件,如 resize、scroll、mousemove 等等...
    淘淘笙悦阅读 226,773评论 42 349
  • 在前端开发的过程中,我们经常会需要绑定一些持续触发的事件,如 resize、scroll、mousemove 等等...
    meng_281e阅读 198评论 1 0