(单位:8秒) 点击“取消防抖”按钮后,再点击“点击这里”按钮,可立即触发事件
function debounce(fn, delay, immediate) { let timer = null let debounced = function () { if (timer) { clearTimeout(timer) } if (immediate) { let callNow = !timer timer = setTimeout(() => { timer = null }, delay) if (callNow) { fn.apply(this, arguments) } } else { timer = setTimeout(() => { fn.apply(this, arguments) }, delay) } } debounced.cancel = function () { clearTimeout(timer) timer = null } return debounced } let count = 0 function addCount() { counterDom.textContent = ++count } const counterDom = document.getElementById('counter') const btnDom = document.getElementById('btn') const debounced = debounce(addCount, 1000 * 8, true) btnDom.addEventListener('click', debounced)