應用場景:前端
1)前端點提交按鈕,防止用戶短時觸發屢次點擊;閉包
2)相似百度輸入直接AJAX請求關鍵字,延遲處理。app
function debounce(func, delay) { let timer;
// 經過閉包使timer一直存在內存中 return function (...args) { if (timer) { clearTimeout(timer);
} timer = setTimeout(() => { func.apply(this, args); //經過apply還原this指向事件 }, delay) } }
// 點擊元素1秒後執行,若是1秒內重複點擊會清空以前定時,從新生成定時器! document.querySelector('.demo').addEventListener('click',debounce((e)=>{ // 須要執行的代碼 console.log(e); },1000),false);