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 只会执行最后一次
希望对你有帮助
13 回答13.1k 阅读
8 回答3k 阅读
3 回答1.6k 阅读✓ 已解决
2 回答5.3k 阅读✓ 已解决
5 回答1.6k 阅读
7 回答2.3k 阅读
3 回答2.4k 阅读✓ 已解决
防抖(去抖): 事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时,之前函数会被取消
leading: fn -> wait -> fn -> wait ...
trailing: wait -> fn -> wait -> fn ...