防抖节流
                    Contents
                    
                
                
            防抖(debounce)
作用:触发多次事件,只执行最后一次。 原理:通过setTimeout延迟执行事件,每次触发函数判断定时器是否存在,存在则重置。
应用场景:
- 输入校验。
 - 联想。
 - 登录、发短信等按钮避免用户点击太快,导致发送了多次请求,需要防抖
 
节流(throttle)
作用:触发多次事件,一段时间内只执行第一次 原理:通过setTimeout延迟执行时间,每次触发函数判断定时器是否存在,存在则不执行
应用场景:
- 监听滚动事件
 - 鼠标连续不断地触发某事件(如点击),只在单位时间内只触发一次;
 
防抖
const debounce = function (func,wait = 50) {
    // 缓存一个定时器id
    let timer = null;
    // 这里返回的函数时每次用户实际调用的防抖函数
    // 如果已经设定过定时器了就清空上一次的定时器
    // 开始一个定时器,延迟执行用户传入的方法
    return function(...args){
        if(timer) clearTimeout(timer);
        timer = setTimeout(()=>{
            //将实际的this和参数传入用户实际调用的函数
            func.apply(this,args);
        },wait);
    }
};
节流
function throttle(fn, wait = 50) {
    let timer = null
    return function (...args) {
        if (timer) return
        setTimeout(() => {
            clearTimeout(timer)
            fn.call(this, ...args)
        }, wait);
    }
}