防抖
函數防抖:短時間多次觸發同一事件,只執行 最開始 或 最後 一次操作。
function debounce(func, ms = 1000) { let timer; return function(...args) { console.log(args); if (timer) { clearTimeout(timer); } timer = setTimeout(() => { func.apply(this, args); }, ms); }; } const task = () => {console.log('run task')}; const debounceTask = debounce(task, 1000); window.addEventListener('click', debounceTask); // click 可以換成 scroll
對 debounce 函數返回的匿名函數中 args 參數(這裡可忽略)的存在作出說明:
const debounceTask = debounce(task, 1000) 其實返回的是匿名函數。
點擊頁面觸發 window.addEventListener(‘click’, debounceTask) 事件,debounceTask 會執行。
這裡 debounceTask 沒有傳遞參數,打印 args 會看到有個事件對象,這裡的原因是因為:
在瀏覽器中,如果函數執行沒有傳遞參數,會默認有個瀏覽器事件對象作為參數,如監聽的是點擊 click 事件的話 args 就是 [PointerEvent]
將 click 換成 scroll,如果在函數不防抖,要執行很多次了~