我知道的JS-防抖和节流


防抖和节流

之前一直不明白或者弄混两者,也是因为没有遇到这种需求
作用:都是防止函数多次调用
区别:防抖动是将多次执行变为最后一次执行(将多个信号合并为一个信号),节流是将多次执行变成每隔一段时间执行。

防抖(debounce)

使用场景
input 输入的格式验证
在一个滚动事件中做一些复杂计算或者实现一个按钮的防二次点击操作

延迟执行的防抖函数

function debounce(fn,time){
  let timer = null
  return function(...args){
    clearTimeout(timer)
    setTimeout(()=>{
      fn.call(this,...args)
    },time)
  }
}

节流(throttle)

使用场景
用在比 input,keyup 触发更频繁的事件中,比如,resize,touchmove,scroll 等
适合用于动画相关的场景

function throttle(fn,time){
  let flag = true
  return function(...args){
    if(!flag) return ;
    flag = false
    setTimeout(()=>{
      fn.call(this,...args)
      flag = true
    },time)
  }
}

文章作者: 沐雪
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 沐雪 !
评论
 上一篇
我知道的JS-异步 我知道的JS-异步
异步PromisePromise 是 Es6 新增的语法,为了解决回调地狱的问题Promise 有三种状态,pending(初始状态),可以通过函数 resolve 和 reject 把状态变为 resolved 或者 rejected,状
2018-04-09
下一篇 
我知道的JS-原型 我知道的JS-原型
原型每个函数都有 prototype 属性,除了 Function.prototype.bind()这个特殊的函数 每个对象都有 proto 属性,指向了创建该对象的构造函数的原型。其实这个属性指向了 [[prototype]],但是 [[
2018-04-04
  目录