高频面试题:手写防抖节流,简单好记。

93 阅读1分钟

这个两个函数都是考验对浏览器性能的优化处理。

//防抖:常用在滚动页面监听数据

当持续触发事件时,设定的时间到来之前,触发一次,重新计数,不管时间间隔,只要到了时间就触发,所以就有缺点,不断触发,事件永远到不了终点。

  function debounce(fn,delay){
            let time=null
            return function(){
                if(time) {
                clearTimeout(time)
                }
                time=setTimeout(fn,time)
            }
        }

//节流:常用表单按钮多次提交触发事件

当持续触发事件时,规定时间内触发一次,时间没到就不触发,这里有个时间间隔。

function throttle(fn, delay) {
            let state = true
            return function() {
                if (state) {
                    return false
                }
                state = false
                setTimeout(() => {
                    fn.apply(this)
                    state=true
                }, delay)
            }
        }

//验证

function handle() {    
    console.log(Math.random()); 
}

addEventListener('scroll', debounce(handle, 1000));