-
一篇介紹文章:https://zhuanlan.zhihu.com/p/38313717
示範示例:http://demo.nimius.net/debounce_throttle/
函數防抖(Debounce)
- 比較好的解釋:https://www.jianshu.com/p/3e8e31f99639
- JavaScript專題之跟着underscore學防抖:https://github.com/mqyqingfeng/Blog/issues/22
-
其實概念很簡單,就兩句話:
第一句:函數執行過一次後,在等待時間内不能再次執行。
第二句: 在等待時間内觸發此函數,則重新計算等待時間。
- 換句通俗的話說,就是:你盡管觸發事件,但是我一定在事件觸發n秒後才執行,如果你在一個事件觸發的n秒内又觸發了這個事件,那我就以新的事件的時間為準,n秒後才執行,總之,就是要等你觸發完事件n秒内不再觸發事件,我才執行。
-
如果不了解上面定義,我可以再給大家舉個生活例子:
如果有人進電梯(觸發事件),那電梯将在10s出發(執行事件句柄),這時如果又有人進電梯了(在10s内再次觸發該事件),我們又得等10s再出發(重新計時)。這個例子很完美的展示了函數防抖的精髓。
函數節流 (Throttle):在某個時間段内,至多執行一次
- JavaScript專題之跟着 underscore 學節流:https://github.com/mqyqingfeng/Blog/issues/26
-
如果你持續觸發事件,每隔一段時間,隻執行一次事件;
如果某個時間段内,沒有觸發事件,則不執行。