TypeScript 中的防抖函数和节流函数
在前端开发中,我们经常会遇到一些需要延迟执行的事件,例如一个输入框的自动补全,滚动事件的监听等等。在这些场景下,防抖函数和节流函数就变得非常有用了。
防抖函数和节流函数都可以控制函数的执行频率,从而更好地控制程序的流程。它们的区别在于:防抖函数会在最后一次触发后再执行一次,而节流函数会在固定时间间隔内执行。
接下来,我们就来详细了解一下 TypeScript 中的防抖函数和节流函数的使用方法和实现原理。
防抖函数的实现
下面是一段防抖的代码,我们通过使用 setTimeout 来实现延迟执行。
-- -------------------- ---- ------- -------- -------------- ------ - --- ------ ---- ------ -------- --------- - -- ------- - -------------------- - ----- - ------------- -- - ---------------- ------ ----- - ----- -- ------- -- -
这里我们传入了两个参数:func 表示要执行的函数,delay 表示延迟时间间隔。在返回的函数内部,我们定义了一个 timer 变量用来保存定时器的引用,然后在每次调用时清除之前的定时器,再重新设置一个延迟执行的新定时器。当延迟时间到了后,会执行传入的函数。
现在可以在任何地方调用 debounce 函数,并得到一个包装过的防抖函数,例如:
const debounceFunc = debounce(() => console.log('debounce!'), 1000); window.addEventListener('mousemove', debounceFunc);
这段代码表示在鼠标移动事件触发时使用防抖函数来缓存执行,并控制函数在一定时间内只会执行一次。
节流函数的实现
与防抖函数不同,节流函数会在一段固定的时间间隔内执行。这个时间间隔就是 delay 参数。
节流函数的实现与防抖函数有些类似。我们需要定义一个变量 lastTime 来记录上一次执行的时间,并在每次调用时计算时间差,如果大于 delay 才执行传入的函数。
-- -------------------- ---- ------- -------- -------------- ------ - --- --------- ------ - -- ------ -------- --------- - ----- --- - ----------- -- ---- - -------- - ------ - -------------- -------- - ---- - -- -
现在我们可以在代码中调用 throttle 函数,并得到一个包装过的节流函数:
const throttleFunc = throttle(() => console.log('throttle!'), 1000); window.addEventListener('mousemove', throttleFunc);
这段代码中,我们使用节流函数来缓存鼠标移动事件的执行,并控制函数在 1 秒内最多执行一次。
总结
通过对防抖函数和节流函数的学习,我们可以更好地控制函数的执行频率,使得程序更加流畅。在实际开发中,我们需要根据项目的需求去选择使用防抖函数或者节流函数。
在前端开发中,我们经常会遇到一些需要延迟执行的事件。在这些场景下,防抖函数和节流函数就变得非常有用了。本文介绍了 TypeScript 中的防抖函数和节流函数的使用方法和实现原理,并提供了示例代码。学习了这两个函数之后,我们可以更好地控制函数的执行频率,使得程序更加流畅。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646eee61968c7c53b0d5068d