无论触发多少次,只执行最后一次。本质是**“归零重置”**。
简约实现
const debounce = function(action,wait){
let timeout;
return function(...arg){
clearTimeout(timeout)
let content = this
timeout = setTimeout(()=>action.apply(content,arg),wait)
}
}
const WAIT_TIME = 2000;
const debouncedAction = debounce(() => {
console.log(`去抖动操作执行了,且在 ${WAIT_TIME}ms 内没有再次点击。`);
}, WAIT_TIME);
const handleClick = function() {
// 2. 每次点击都调用这个已经去抖动过的函数
debouncedAction();
// 这条log会立即执行,因为它在 setTimeout 之外
console.log("新的点击事件已被触发,正在等待去抖...");