首页 Web前端,潜神默记

什么是防抖

防抖策略(debounce)是当事件被触发后,延迟 n 秒后再执行回调,如果在这 n 秒内事件又被触发,则重新计时
防抖
代码示例:

let timer = null    // 创建一个标记用来存放定时器的返回值
return function () {
    // 每当用户输入的时候把前一个 setTimeout clear
    clearTimeout(timer)
    // 然后又创建一个新的 setTimeout, 这样就能保证 initial 间隔内如果时间持续触发,就不会执行 fn 函数
    timer = setTimeout(() => {
        fn.apply(this, arguments)
    }, 500)
}

什么是节流

节流策略(throttle),顾名思义,可以减少一段时间内事件的触发频率。
节流
代码示例:

let canRun = true   // 通过闭包保存一个标记
return function () {
    // 在函数开头判断标记是否为 true,不为 true 则 return
    if (!canRun) return
    // 立即设置为 false
    canRun = false
    // 将外部传入的函数的执行放在 setTimeout 中
    setTimeout(() => {
        // 最后在 setTimeout 执行完毕后再把标记设置为 true (关键)表示可以执行下一次循环了
        // 当定时器没有执行的时候标记永远是 false,在开头被 return 掉
        fn.apply(this, arguments)
        canRun = true
    }, 500)
}

总结和区别

  • 防抖:如果事件被频繁触发,防抖能保证只有最有一次触发生效!前面 N 多次的触发都会被忽略!
  • 节流:如果事件被频繁触发,节流能够减少事件触发的频率,因此,节流是有选择性地执行一部分事件!



文章评论

目录