當前位置:
首頁 > 知識 > 用一個bug搞懂什麼是JavaScript函數節流

用一個bug搞懂什麼是JavaScript函數節流


點擊上方藍字關注「小鄭搞碼事」,每天都能學到知識,搞懂一個問題!

什麼是JavaScript函數節流?相信有不少同學腦海里都沒概念,其實很簡單......

用一個bug搞懂什麼是JavaScript函數節流

如果你沒聽說過"函數節流",那下面這種需求你一定遇到過:就是當瀏覽器窗口改變的時候需要去改變頁面中一些元素的大小,相信看到這個需求的時候,大家都會立馬想到用window的resize事件。沒錯,下面我們一步一步來說。


一、實例展示:

為了實現上面那個功能,下面是我寫的一段JS代碼(為了說明問題,用的是測試代碼),是這樣的:

用一個bug搞懂什麼是JavaScript函數節流

這段代碼很容易理解,因為是測試代碼,我寫的比較簡單,於是乎,我高高興興的開始測試代碼,效果是這樣的:

用一個bug搞懂什麼是JavaScript函數節流

哎呀!如上圖所示,我稍微拖拽一下瀏覽器窗口,resizeWin函數就執行了幾十次,這完全不是我想要的效果呀,假如,resizeWin函數里有一個ajax請求,簡單的一個拖拽就發起了幾十次請求,嚴重時,將拖慢整個網頁,這必屬於BUG,這肯定是不行的。於是乎,我就開始尋找解決辦法,這個辦法就是函數節流。


二、函數節流:

上面那個問題,其實我只是希望在拖拽結束時觸發一次就行,拖拽過程中不需要觸發,所以我就將代碼更改了一下,更改後是這樣的:

用一個bug搞懂什麼是JavaScript函數節流

如上圖代碼可知,節流的原理就是,利用定時器,讓函數執行延遲100毫秒,在100毫秒內如果有函數又被調用則刪除上一次調用,這次調用100毫秒後執行,如此往複。在來看一下更改後的效果:

用一個bug搞懂什麼是JavaScript函數節流

好了,問題解決了,函數節流就是這麼一回事,該總結了。


三、寫在最後的總結:

這篇文章很短,主要是給大家講講函數節流,從上面來看,函數節流的原理挺簡單的:當觸發一個事件時,先setTimout讓這個事件延遲一會再執行,如果在這個時間間隔內又觸發了事件,那就clear掉原來的定時器,再setTimeout一個新的定時器延遲一會執行。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 小鄭搞碼事 的精彩文章:

H5-如何在項目中正確應用rem
教你在項目中如何保存用戶狀態
理解了路徑和句柄,才算真的會了Express路由的使用
想了解函數引用和函數調用本質區別的,這篇文章不要錯過
關於js中的arguments,只需要搞懂這三點

TAG:小鄭搞碼事 |

您可能感興趣

DeBug Python代碼全靠print函數?換用這個一天2K+Star的工具吧
Python 特殊函數(lambda,map,filter,reduce)
mysql中concat函數,concat_ws函數,concat_group函數之間的區別
request,ProxyHandle與HttpCookiProcessor函數用法
php中curl同時發送多個請求curl_multi函數集的用法
Linux下C函數庫:glibc與newlibc
mysql字元串連接concat和concat ws函數
Python中的lambda函數
基於fminsearch的約束優化函數fminsearchbnd, fminsearchcon
自定義損失函數Gradient Boosting
使用Istio控制Serverless架構Fn Project中的函數間流量路由
excel函數left與right的使用教程
python實現並繪製 sigmoid函數,tanh函數,ReLU函數,PReLU函數
揭秘 Python 中的 enumerate 函數
Python的"print「函數在」Hello World"之外的延伸
Python的"print「函數在」Hello World"之外的延伸
ES6 Generator 函數
Excel文本函數search和searchb教程
函數節流(throttle)與函數去抖(debounce)
singmod 與relu損失函數的比較