TypeScript 中的防抖函数和节流函数

阅读时长 3 分钟读完

TypeScript 中的防抖函数和节流函数

在前端开发中,我们经常会遇到一些需要延迟执行的事件,例如一个输入框的自动补全,滚动事件的监听等等。在这些场景下,防抖函数和节流函数就变得非常有用了。

防抖函数和节流函数都可以控制函数的执行频率,从而更好地控制程序的流程。它们的区别在于:防抖函数会在最后一次触发后再执行一次,而节流函数会在固定时间间隔内执行。

接下来,我们就来详细了解一下 TypeScript 中的防抖函数和节流函数的使用方法和实现原理。

防抖函数的实现

下面是一段防抖的代码,我们通过使用 setTimeout 来实现延迟执行。

-- -------------------- ---- -------
-------- -------------- ------ -
  --- ------ ----
  ------ -------- --------- -
    -- ------- -
      --------------------
    -
    ----- - ------------- -- -
      ---------------- ------
      ----- - -----
    -- -------
  --
-

这里我们传入了两个参数:func 表示要执行的函数,delay 表示延迟时间间隔。在返回的函数内部,我们定义了一个 timer 变量用来保存定时器的引用,然后在每次调用时清除之前的定时器,再重新设置一个延迟执行的新定时器。当延迟时间到了后,会执行传入的函数。

现在可以在任何地方调用 debounce 函数,并得到一个包装过的防抖函数,例如:

这段代码表示在鼠标移动事件触发时使用防抖函数来缓存执行,并控制函数在一定时间内只会执行一次。

节流函数的实现

与防抖函数不同,节流函数会在一段固定的时间间隔内执行。这个时间间隔就是 delay 参数。

节流函数的实现与防抖函数有些类似。我们需要定义一个变量 lastTime 来记录上一次执行的时间,并在每次调用时计算时间差,如果大于 delay 才执行传入的函数。

-- -------------------- ---- -------
-------- -------------- ------ -
  --- --------- ------ - --
  ------ -------- --------- -
    ----- --- - -----------
    -- ---- - -------- - ------ -
      --------------
      -------- - ----
    -
  --
-

现在我们可以在代码中调用 throttle 函数,并得到一个包装过的节流函数:

这段代码中,我们使用节流函数来缓存鼠标移动事件的执行,并控制函数在 1 秒内最多执行一次。

总结

通过对防抖函数和节流函数的学习,我们可以更好地控制函数的执行频率,使得程序更加流畅。在实际开发中,我们需要根据项目的需求去选择使用防抖函数或者节流函数。

在前端开发中,我们经常会遇到一些需要延迟执行的事件。在这些场景下,防抖函数和节流函数就变得非常有用了。本文介绍了 TypeScript 中的防抖函数和节流函数的使用方法和实现原理,并提供了示例代码。学习了这两个函数之后,我们可以更好地控制函数的执行频率,使得程序更加流畅。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646eee61968c7c53b0d5068d

纠错
反馈