函数防抖和节流

函数防抖

什么是函数防抖

在写js的时候,有时候会频繁的触发函数,在一些场景中这么可能没问题,但是在一些特殊场景中可能就会对性能产生严重的影响,所以我们需要对其触发函数的时机进行控制,比如只有超过一定之间间隔才会触发,如果两次函数触发时间间隔小于规定的时间间隔,在采用最新的触发时间为标准,这就是函数防抖。

举例

function debounce (func, wait) {
      let timeout
      return function () {
        //解决this指向的问题,不然this=window
        let context = this
        //解决event参数
        let argus = arguments
        clearTimeout(timeout)
        timeout = setTimeout(function () {
          func.apply(context, argus)
        }, wait)
      }
}
htmlNode.onmouseover = debounce (func, wait)

上述例子中,每次鼠标移动都会触发绑定的函数,但是通过函数防抖,可以保证在上一次函数执行之前再次触发函数,会清除上一次函数的setTimeout,而已最新的一次为准。

函数节流

什么是函数节流

与函数防抖不同的地方在于,函数节流是在一定时间间隔内不会重复的去执行一个函数,知道上一次的函数执行完毕,才会触发下一次函数。

举例

//函数节流
function throttle1 (func, wait) {
      let context, argus
      let pre = 0
      return function () {
        context = this
        argus = arguments
        //获取毫秒数
        let now = +new Date()
        if (now - pre > wait) {
          func.apply(context, argus)
          pre = now
        }
      }
}
function throttle2 (func, wait) {
      let context, argus, timeout
      return function () {
        context = this
        argus = arguments
        if (!timeout) {
          timeout = setTimeout(function () {
            timeout = null
            func.apply(context, argus)
          } ,wait)
        }
      }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在前端开发的过程中,我们经常会需要绑定一些持续触发的事件,如 resize、scroll、mousemove 等等...
    Grace_feb3阅读 401评论 0 0
  • 在前端开发的过程中,我们经常会需要绑定一些持续触发的事件,如 resize、scroll、mousemove 等等...
    淘淘笙悦阅读 226,562评论 42 349
  • 在前端开发的过程中,我们经常会需要绑定一些持续触发的事件,如 resize、scroll、mousemove 等等...
    meng_281e阅读 196评论 1 0
  • 本文摘自这里,通俗易懂。防抖和节流在前端和客户端开发中经常会用到,而且适用场景还挺多,大多数成熟的第三方库都有提供...
    nuannuan_nuan阅读 856评论 0 1
  • 转自 简书 什么是函数防抖和节流 在前端开发过程中,我们经常会遇到需要绑定一些持续性出发事件的场景.例如resiz...
    TouchMe丶阅读 409评论 1 0