JS常用函数 防抖和节流

422 阅读1分钟

防抖函数

  • 原理: 在事件被触发n秒后在执行回调,如果在这n秒内又被触发,则重新计时

    const debounce = (fn,delay) => {
        let timer = null;
        return (...arg) => {
            clearTimeout(timer);
            timer = setTimeout(()=>{
                fn.apply(this,args);
            },delay)
        }
    }

适用场景

  • 按钮提交场景:防止多次提交按钮,只执行最后一次提交
  • 服务端验证场景:表单验证需要服务端配合,只执行一段连续的输入事件的最后一次,还有搜索联想词功能类似生存环境请用lodash.debounce

节流函数

  • 规定一段时间内,只能触发一次函数,如果这个单位时间内多次触发,只有一次生效
    const throttle = (fn,delay=500)=>{
        let flag = true;
        return (...args) => {
            if(!flag) return
            flag = false;
            setTimeout(()=>{
                fn.apply(this,args)
                flag = true
            },delay)
        
        }
    
    }
    

适用场景

  • 拖拽场景:固定时间内只执行一次,防止高频词触发位置变动
  • 缩放场景,监控浏览器resize
  • 动画场景,避免短时间内多次触发动画引起性能问题