更容易理解的节流和防抖

84 阅读1分钟

节流

一般用于点击事件,防止短时间点击过多次

const throttle = (f,time) =>{     //声明一个函数,有俩个参数,如果需要this可以设置为第三个参数
    let timer = null            //定义一个变量为空
    return (...arguments)=>{          //返回一个函数,参数为arguments,参数是为了有需要的时候传参
        if(timer) {return}           //判断 timer 是否为真,如果为真返回空,如果不为真,执行下面函数
        f.call(undefind,...arguments)   //执行 f 函数,用call方法指定this(上面第三参数)和传参
        timer = setTimeout(()=>{       //赋值timer 为定时器
            timer=null       //     计时器计时完成后,重新赋值为null
        },time)              //   time是上面函数穿的参数时间
    }
}


防抖

一般用于防止频繁拖动操作,等拖动停止的时候才触发效果

const debounce = (f,time) =>{   //声明一个函数,有俩个参数,如果需要this可以设置为第三个参数
    let timer = null            //定义一个变量为空
    return (...arguments)=>{   //返回一个函数,参数为arguments,参数是为了有需要的时候传参
        if(timer !== null) {    // 当timer 不为空的时候,执行下面操作
            clearTimeout(timer)   // 取消定时器
        } 
        timer = setTimeout(()=>{  // 赋值timer 为定时器
            f,call(undefined,...arguments) //执行 f 函数,用call方法指定this(上面第三参数)和传参
            timer = null       //计时器计时完成后,重新赋值为null
        },time)    //time是上面函数穿的参数时间
    }
}