去抖函数一些问题?

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

阅读 2.5k
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 只会执行最后一次
希望对你有帮助

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏