去抖函数一些问题?

1.如果在delay时间内又触发了一次 原函数执行是延后了还是不变?
2.leading和trailing两个参数是干啥的 我很难理解

阅读 187
评论
    3 个回答

    防抖(去抖): 事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时,之前函数会被取消

    leading: fn -> wait -> fn -> wait ...

    trailing: wait -> fn -> wait -> fn ...

        这就像你 朋友喊你 开黑一样 同时有 A B C D E F....无数个朋友喊你,每个朋友你都会考虑 1 分钟时间
        A 喊你 你等待 30s后(小于1分钟) 结果 B 也喊你了 你就会放弃 A 的请求
        再过 40s C 喊你了 你就回放弃 B 的请求...依次循环
        直到最后一个(假如是 X ) X 喊你之后 一分钟内没有新朋友喊你 那么你就会和朋友 X 去开黑.
        防抖 就是只执行最后一次请求, T 次都会被 T+1 次的请求取消掉.
        如果自己要简单实现一个的话

        let timer;
        function debounce(){
            if(timer) clearTimeout(timer)
            timer = setTimeout(()=>{
                console.log('debounce')
            },1000)
        }

        你可以无限触发 debounce 但是 console 只会执行最后一次
        希望对你有帮助

          撰写回答

          登录后参与交流、获取后续更新提醒