函数防抖题解

题目链接

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
 */
相关推荐
贩卖黄昏的熊几秒前
陕西省ICPC省赛总结
算法
jieyucx6 分钟前
Go 语言进阶:构造函数、父子结构体与组合复用详解
服务器·算法·golang·继承·结构体·构造函数
澈2076 分钟前
滑动窗口算法:双指针高效解题秘籍
数据结构·c++·算法
前端若水13 分钟前
在 Vue 2 与 Vue 3 中使用 markdown-it-vue 渲染 Markdown 和数学公式
前端·javascript·vue.js
之歆19 分钟前
DAY_10 JavaScript 深度解析:原型链 · 引用类型 · 内置对象 · 数组方法全攻略(下)
开发语言·前端·javascript·ecmascript
渣渣苏30 分钟前
硬核拆解 HNSW:亿级向量如何实现毫秒级召回?(上篇)
人工智能·算法·支持向量机·ai·向量数据库·hnsw·智能体
如竟没有火炬30 分钟前
字符串相乘——int数组转字符串
开发语言·数据结构·python·算法·leetcode·深度优先
吃好睡好便好33 分钟前
在Matlab中绘制三维等高线图
开发语言·python·学习·算法·matlab·信息可视化
项目申报小狂人43 分钟前
一种使用双向长短时记忆网络结合鲸鱼优化算法的类火星矿物元素精确定量分析模型
人工智能·算法·lstm
行星飞行1 小时前
从 cursor 、 Claude code 迁移到 codex,30 分钟快速上手 codex 常用技巧
前端