防抖 (Debounce)
防抖的目的是在一系列連續的呼叫中,只有在最後一次呼叫後的一段時間內沒有新的呼叫才會執行該函式。這對於一些需要在使用者停止操作後才執行的場景非常有用,比如輸入框的搜尋建議。
function debounce(func, wait) { let timeout; return function() { const context = this; const args = arguments; clearTimeout(timeout); timeout = setTimeout(function() { func.apply(context, args); }, wait); }; }
節流 (Throttle)
節流的目的是保證一個函式在一定時間內只被呼叫一次。這可以確保函式不會因為高頻觸發而消耗過多資源。例如,當使用者滾動頁面時,我們可能只想每隔一段時間才更新資料。
function throttle(func, limit) { let inThrottle; return function() { const args = arguments; const context = this; if (!inThrottle) { func.apply(context, args); inThrottle = true; setTimeout(function() { inThrottle = false; }, limit); } }; }
// 使用防抖 const debouncedFunction = debounce(function() { console.log('This will be logged after 500ms of silence.'); }, 500); window.addEventListener('resize', debouncedFunction); // 使用節流 const throttledFunction = throttle(function() { console.log('This will be logged at most once every second.'); }, 1000); window.addEventListener('scroll', throttledFunction);
像這種基本的而且常用的知識還是挺容易考的