最全面的函数防抖和节流

122 阅读1分钟

防抖函数

function func(){
    console.log("ok")
}
function debounce(func,wait=500,immediate = false){
    let timer = null;
    return function anonymous(...param){
        let now = immediate && !timer;
        clearTimeout(timer)
        timer = setTimeout(()=>{
            timer = null;
            !immediate?func.call(this,...param):null;
        },wait)
        now?func.call(this,...param):null;
    }
}
btn.onclick = debounce(func,500,true);

节流函数

function throrrle(func,wait = 500){
    let timer = null;
    let pro = 0;
    return function anonymous(...arg){
        let now = new Date();
        let diff = wait - (now - pro);
        if(diff<=0){
            clearTimeout(timer);
            time = null;
            pro = now;
            func.call(this,...arg);
        }else if(!timer){
            timer = setTimeout(()=>{
                clearTimeout(timer);
                time = null;
                pro = new Date();
                func.call(this,...arg);
            },diff);
        }
    }
}
btn.onclick = throrrle(func,500)