標籤(空格分隔): underscore
本文是underscore原始碼剖析系列第六篇文章,上節我們介紹了throttle節流函式的實現,這節將會介紹一下節流函式的兄弟 —— debounce防抖動函式。
throttle函式是在高頻率觸發的情況下,為了防止函式的頻繁呼叫,將其限制在一段時間內只會呼叫一次。而debounce函式則是在頻繁觸發的情況下,只在觸發的最後一次呼叫一次,想像一下如果我們用手按住乙個彈簧,那麼只有等到我們把手鬆開,彈簧才會彈起來,下面我用乙個電梯的例子來介紹debounce函式。
假如我下班的時候去坐電梯,等了一段時間後,電梯正準備關上門下降,這個時候乙個同事走了過來,電梯門被開啟,這樣電梯就會繼續等一段時間,如果中間一直有人進來,那麼電梯就一直不會下降,直到最後乙個人進來後過了一定時間後還沒有下乙個人進來,這時電梯才會下降。
除了電梯,事實上我們還有很多應用場景,比如我用鍵盤不斷輸入文字,我希望等最後一次輸入結束後才會呼叫介面來請求展示聯想詞,如果每次輸入乙個字的時候就會呼叫介面,這樣呼叫未免太過於頻繁了。
沒有debounce時:
有debounce時:
知道debounce的工作原理了,我們可以先自己實現乙個比較簡單的debounce函式。
function debounce(func, wait)
return function()
}
麻雀雖小,五臟俱全,不過這個函式還是有很多問題,比如每次觸發都設定了太多的settimeout,這樣會比較耗費cpu,我們來看一下underscore的實現方式。
// debounce函式傳入三個引數,分別是要執行的函式func,延遲時間wait,是否立即執行immediate
// 如果immediate為true,那麼就會在wait時間段一開始就執行一次func,之後不管觸發多少次都不會再執行func
// 在類似不小心點了提交按鈕兩下而提交了兩次的情況下很有用
_.debounce = function (func, wait, immediate) else }};
return function ()
return result;
};};
python的函式分類 Python函式分類及操作
1 定義函式 2 def func1 3 testing 4 print in the func1 5 return 0 7 定義過程 8 def func2 9 testing2 10 print in the func2 12 呼叫函式 13 x func1 15 呼叫過程 16 y func2...
linux socket select 函式分析
linux socket select 函式分析 include void fd clr fd,fd set fdset void fd copy fd set fdset orig,fd set fdset copy intfd isset fd,fd set fdset void fd set ...
函式分享 每日PHP函式分享 2021 2 4
array chunk將乙個陣列分隔成多個 array chunk array array,int size,bool preserve keys false array將乙個陣列分隔成多個陣列,其中每個陣列的單元數目有size決定。最後乙個陣列的單元資料可能會少於size個。引數 array 需要...