js 防抖和节流

// 实现防抖函数
function debounce(fn, delay, immediate = false) {
    // 实现
    let timer=null;
    let result=null;
    return function(...args){
        if(timer){
            clearTimeout(timer);
            timer=null;
        }
        if(immediate){
            const callnow=!timer;
            timer=setTimeout(()=>{
                timer=null;
            },delay);
            if(callnow){
                result=fn.apply(this,args);
            }
        }else{
            timer=setTimeout(()=>{
                result=fn.apply(this,args);
            },delay)
        }
        return result;
    }
}
function throttle(fn, limit) {
    let timer = null;
    let lastTime = 0;
    
    return function(...args) {
        const now = Date.now();
        const remaining = limit - (now - lastTime);
        
        // 清除之前的定时器
        if (timer) {
            clearTimeout(timer);
            timer = null;
        }
        
        // 应该立即执行
        if (remaining <= 0) {
            fn.apply(this, args);
            lastTime = now;
        } 
        // 设置定时器延迟执行
        else {
            timer = setTimeout(() => {
                fn.apply(this, args);
                lastTime = Date.now();
                timer = null;
            }, remaining);
        }
    };
}

 

posted @ 2025-12-29 16:15  howhy  阅读(3)  评论(0)    收藏  举报