JS防抖函数与节流函数

80 阅读1分钟

防抖函数:

当持续触发事件,在一定时间内没有再触发事件,事件处理函数才会执行一次

    <input type="text" id="input">

    <script>
    
        var input = document.getElementById('input')

        // 防抖函数的核心     setTimeout  闭包
        function debounce(callback, delay){
            let timer
            return function(value){
                // 每次执行先清除一下定时器
                // 重新生成新的定时器
                // 当定时器执行期间没有被清除则执行回调方法
                clearTimeout(timer)
                timer = setTimeout(function(){
                    callback && callback(value)
                }, delay)
            }
        }

        // 防抖回调 处理相关逻辑
        function callbackFn(value){
            console.log(value)
        }

        // 让return 出来的函数执行
        var debounceFunc = debounce(callbackFn,1000);

        // 监控input输入框的相关逻辑
        input.addEventListener('keyup', function(e){
            debounceFunc(e.target.value)
        })
        
    </script>

节流函数

当持续触发事件的时候  保证一段时间内  只调用一次事件执行

    <button id="button">点击</button>

    <script>

        //  setTimeout  闭包
        function throttle(callback, delay){
            let timer
            return function(){
                // timer有值时,不需要做任何处理
                if(!timer){
                    // timer为null,需要重新设置timer定时器,定时器结束时并将timer设置为null
                    // 并执行回调函数
                    timer = setTimeout(function(){
                        timer = null
                        callback && callback()
                    }, delay)
                }
            }
        }

        // 防抖回调 处理相关逻辑
        function callbackFn(){
            console.log(new Date().toString())
        }

        // 监控input输入框的相关逻辑
        document.getElementById('button').onclick = throttle(callbackFn, 2000)
        
    </script>