[关闭]
@frank-shaw 2020-03-09T02:34:31.000000Z 字数 799 阅读 970

JS基础之函数防抖

javaScript


防抖本质上是连续触发的时间段内只允许响应一次。可立即执行也可非立即执行。
节流则是单位时间内响应一次。可立即执行也可非立即执行。

防抖

分为两种方式,一种是立即执行,一种是非立即执行。看场景选择不同的需求。

(非立即执行版)防抖动的理解:防抖动就是,只要乘客不断地在刷卡,司机师傅就不能开车,等着乘客都上车了,再过一个特定的等待时间,才能启动。

  1. /**
  2. * 防抖函数,返回函数被连续调用时,空闲时间必须大于或等于 delayMilliSec, fn 才会执行
  3. *
  4. * @param {function} fn 回调函数
  5. * @param {number} delayMilliSec 表示时间窗口的间隔
  6. * @param {boolean} isImmediate 设置为ture时,立即调用函数
  7. * @return {function} 返回客户调用函数
  8. */
  9. function debounce( fn, delayMilliSec = 1000, isImmediate = true){
  10. let timerId;
  11. return function(...args){
  12. let context = this;
  13. timerId && clearTimeout(timerId);
  14. if(isImmediate){
  15. if(!timerId) fn.apply(context, args);
  16. timerId = setTimeout(()=> { timerId = null}, delayMilliSec);
  17. }else {
  18. timerId = setTimeout(()=> {
  19. fn.apply(context, args);
  20. }, delayMilliSec);
  21. }
  22. }
  23. }

值得注意的几个点:

防抖和节流的不同之处在于:是否在触发的时候,取消计时器。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注