防抖理解:將多次操作合并為一次操作進行历极。原理是維護一個計時器,規(guī)定在delay時間后觸發(fā)函數(shù)米死,但是在delay時間內(nèi)再次觸發(fā)的話锌历,就會取消之前的計時器而重新設(shè)置。這樣一來峦筒,只有最后一次操作能被觸發(fā)究西。
節(jié)流理解:使得一定時間內(nèi)只觸發(fā)一次函數(shù)。原理是通過判斷是否有延遲調(diào)用函數(shù)未執(zhí)行物喷。
區(qū)別: 函數(shù)節(jié)流不管事件觸發(fā)有多頻繁卤材,都會保證在規(guī)定時間內(nèi)一定會執(zhí)行一次真正的事件處理函數(shù),而函數(shù)防抖只是在最后一次事件后才觸發(fā)一次函數(shù)峦失。 比如在頁面的無限加載場景下扇丛,我們需要用戶在滾動頁面時,每隔一段時間發(fā)一次 Ajax 請求宠进,而不是在用戶停下滾動頁面操作時才去請求數(shù)據(jù)晕拆。這樣的場景,就適合用節(jié)流技術(shù)來實現(xiàn)材蹬。
定義防抖: 頻繁觸發(fā),但只在特定的時間內(nèi)沒有觸發(fā)執(zhí)行條件才執(zhí)行一次代碼
定義節(jié)流: 頻繁觸發(fā),但只在特定的時間內(nèi)才執(zhí)行一次代碼
形象理解如下:
防抖: 此時此刻我們都在排隊等公交实幕,司機說必須等到坐滿才會發(fā)車,這時候的參照標準就是最后一個人上車堤器,公交車好比我們的js代碼昆庇,最后一個人就充當我們的執(zhí)行條件。
節(jié)流: 每5分鐘發(fā)車一路公交車闸溃,無論車上有多少人整吆。