前言:
記錄一下 Debounce
跟 Throttle
參考資料:
- JS中的debounce与throttle
- Day25-認識與實作 Debounce 和 Throttle
- JavaScript 节流 - Web前端工程师面试题讲解
- LeetCode Throttle Editorial
Outline
- Definition of Debounce and Throttle
- How to write Debounce and Throttle function
- Which situation will you use
- Reference
Debounce
簡單來說 Debounce
會監聽時間內連續處發事件的最後一次觸發事件。若事件一直不段重複處發,則時間會一直重新計算!像是 input 框的autoComplete
Codepen
1 | function debounce(func, delay = 1000){ |
這邊其實就是用到閉包概念,內部函式會訪問外部函數的作用域。
Throttle
而 Throttle
指的是第一次執行時並不會延遲,而當第二次開始只要使用者一段時間內連續觸發,在 throttle
延遲時間內只會執行最後一次。
Codepen
1 | function throttle(func, delay) { |
Use case
- Debounce ex: autoComplete
- Throttle ex: mouseMove、scrollDown