饥人谷技术博客JavaScript

JavaScript 中的函数防抖动与节流

2018-09-24  本文已影响7人  EnochQin

摘要:JavaScript 中的函数防抖和节流是很常用的需求,前端面试也是频率比较高被问到的知识,本文就通过二者的概念、实现思路、示例代码和应用场景来介绍一下它们。


概念

思路

代码

函数防抖示例代码:

function debounce(func, delay) {
    let timeout
    return function(e) {
        clearTimeout(timeout)
        let args = arguments
        timeout = setTimeout(() => {
          func.apply(this, args)
        },delay)
    }
}

var validate = debounce(function(e) {
    console.log( e.target.value)
}, 2000)

document.querySelector("input").addEventListener('input', validate)

函数节流示例代码:

function debounce(func, delay) {
    let timeout
    return function(e) {
        clearTimeout(timeout)
        let args = arguments
        timeout = setTimeout(() => {
          func.apply(this, args)
        },delay)
    }
}

var validate = debounce(function(e) {
    console.log( e.target.value)
}, 2000)

document.querySelector("input").addEventListener('input', validate)

应用场景

防抖 debounce 多用于 “ 延迟多久后触发 ”

具体用于input输入框架的格式验证,假如只是验证都是字母也罢了,太简单了,不怎么耗性能,如果是验证是否身份证,这性能消耗大,你可以隔170ms才验证一次。这时就需要这个东西。或者你这个是自动完全,需要将已有的输入数据往后端拉一个列表,频繁的交互,后端肯定耗不起,这时也需要这个,如隔 350ms 。
所以大致就有以下两种应用情景:

节流 throttle 多用于 “ 多久触发一次 ”

函数节流会用在比input, keyup更频繁触发的事件中,如resize, touchmove, mousemove, scroll。throttle 会强制函数以固定的速率执行。因此这个方法比较适合应用于动画相关的场景。

相关链接

(END)

上一篇下一篇

猜你喜欢

热点阅读