BFE.devAI解答 - JavaScript 代码题
6. 手写debounce()
实现一个基本的debounce()
函数,可以根据规定的时间延迟执行函数。当连续的调用发生在规定时间内,则只执行最后一次调用。
function debounce(func, delay) { let timer; return function (...args) { clearTimeout(timer); timer = setTimeout(() => { func.apply(this, args); }, delay); };}
在上面的实现中,debounce()
函数返回一个新函数,该函数使用clearTimeout()
方法取消前一个正在等待执行的计时器,并设置一个新的计时器以等待规定时间。最后一次调用将调用传递给原始函数。
用法示例:
function doSomething(text) { console.log(`Doing something with ${text}`);}const debouncedFunc = debounce(doSomething, 2000);debouncedFunc('Hello'); debouncedFunc('Debounce'); // 取消之前的计时器,执行下一个计时器debouncedFunc('Function'); // 取消之前的计时器,执行下一个计时器
在上述示例中,doSomething()
函数将在每次调用时获得新的参数,但只有在最后一次调用后才会实际执行函数。这将有助于减少重复的函数调用和提高性能。