函数防抖题解

题目链接

2627. 函数防抖 - 力扣(LeetCode)

思路

题目提到时间内再次调用需要取消上一次调用,我们从 setTimeout 里面可以知道,该函数返回一个number类型,并且会延迟执行

可以根据当前 timer 是否为 null 的值 ,知道当前是否已经有 setTimeout 在执行,如果存在 则,使用 clrearTimeout 取消,并重置 timer 的值,最后更新 timer 需要执行的代码

apply,是改变 this 指向,并执行 函数,args 是一个参数数组,所以这里使用了 fn.apply 方法来改变 this 指向并执行 fn

这里有一个小坑,setTimeout 的第一个参数需要是一个回调函数,不能直接执行 fn

代码

javascript 复制代码
/**
 * @param {Function} fn
 * @param {number} t milliseconds
 * @return {Function}
 */
var debounce = function (fn, t) {
    let timer = null
    return function (...args) {
        if (timer != null) {
            clearTimeout(timer)
            timer = null
        }
        timer = setTimeout(() => fn.apply(this, args), t)
    }
};

/**
 * const log = debounce(console.log, 100);
 * log('Hello'); // cancelled
 * log('Hello'); // cancelled
 * log('Hello'); // Logged at t=100ms
 */
相关推荐
再难也得平2 小时前
力扣41. 缺失的第一个正数(Java解法)
数据结构·算法·leetcode
颜酱2 小时前
环检测与拓扑排序:BFS/DFS双实现
javascript·后端·算法
我发现一个问题2 小时前
node+ts+koa全栈框架学习-1
前端
sure2822 小时前
React Native中自定义TabBar
前端·react native·react.js
IronMurphy2 小时前
【算法二十】 114. 寻找两个正序数组的中位数 153. 寻找旋转排序数组中的最小值
java·算法·leetcode
bluceli2 小时前
CSS自定义属性与主题切换:构建动态UI的终极方案
前端·css
默默学前端2 小时前
HTML 高频面试题 5 道|吃透基础,面试不慌(附详细解析)
前端·面试·职场和发展·html5
豆芽包2 小时前
前端性能优化-图片懒加载技术
前端·面试
实心儿儿2 小时前
算法2:链表的中间结点
数据结构·算法·链表