1.如果在delay时间内又触发了一次 原函数执行是延后了还是不变?
2.leading和trailing两个参数是干啥的 我很难理解
这就像你 朋友喊你 开黑一样 同时有 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 只会执行最后一次
希望对你有帮助
10 回答11k 阅读
6 回答2.9k 阅读
5 回答4.7k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
3 回答5k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
防抖(去抖): 事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时,之前函数会被取消
leading: fn -> wait -> fn -> wait ...
trailing: wait -> fn -> wait -> fn ...