JS防抖函数

news2024/12/25 9:07:03

场景

        频繁触发耗时操作,仅关心最后一次的触发时使用防抖函数

代码

function debounce(fn , delay){
    let timer;
    return () => {
        clearTimeout(timer);
        timer = setTimerout(()=>{
            fn()
        },delay)
    }
}

详解

                

        触发一次函数,然后执行后续操作

function debounce(fn){
    fn()
}

        如果该函数在短时间内被频繁触发,就会导致卡顿

        我们可以加一个定时器,来限制触发

function debounce(fn , delay){
    setTimeout(()=>{
        fn()
    },delay)
}

        但是这么写会导致下面的结果

        我们只是延长了执行后续操作的时间,并没有解决反复执行的问题

        所以我们要在函数被再次触发时中断之前的函数

function debounce(fn , delay){
    let timer;
    clearTimeout(timer);
    timer = setTimeout(()=>{
        fn()
    },delay)
}

        但是这段代码还是有点问题,我们真的打断了上一个函数吗?

        我们创建的timer作用域和清除的timer作用域是一样的

        每次执行防抖我们都清除了一次timer , 但是我们清除的timer也是我们新创建的timer,并不是上一个timer , 所以我们要返回一个函数 , 这样我们才是清除的上一步timer

function debounce(fn , delay){
    let timer;
    return () => {
        clearTimeout(timer);
        timer = setTimerout(()=>{
            fn()
        },delay)
    }
}

        这样我们清除的timer作用域是上一级的timer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1472512.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

消息中间件之RocketMQ源码分析(十七)

Broker CommitLog索引机制的数据结构 ConsumerQueue消费队列 主要用于消费拉取消息、更新消费位点等所用的索引。源代码参考org.apache.rocketmq.store.ConsumerQueue.该文件内保存了消息的物理位点、消息体大小、消息Tag的Hash值 物理位点:消息在CommitLog中的位点值消息体…

音乐格式转换软件有哪些?5款必备神器

音乐格式转换软件有哪些?音乐,作为人类情感的载体,伴随着我们生活的每一个角落。在享受音乐的同时,我们有时也面临着音乐格式不兼容的问题。不用担心,今天我将为大家揭秘五款音乐格式转换软件,让你的音乐之…

开发一套智慧工地系统需要多久时间?

什么是智慧工地? 智慧工地是智慧地球理念在工程领域的行业具现,是一种崭新的工程全生命周期管理理念。它运用信息化手段,通过三维设计平台对工程项目进行精确设计和施工模拟,围绕施工过程管理,建立互联协同、智能生产…

投资黄金在哪里买比较好?

黄金,作为一种传统的避险资产,历来受到投资者的青睐。在全球经济波动的大背景下,黄金的价值愈发凸显。那么,投资黄金在哪里买比较好呢?本文将重点探讨在香港黄金平台投资黄金的优势,并以金田金业为例&#…

外包工作两个月,技术退步让我决心改变

大家好,我是一名大专生,2019年通过校招进入了湖南的一家软件公司。在这里,我从事了接近4年的功能测试工作。然而,今年8月份,我深刻地意识到,我不能继续这样下去了。 长时间在一个舒适的环境里,…

ThreadLocal从使用到实现原理与源码详解

ThreadLocal概述 ThreadLocal是多线程中对于解决线程安全的一个操作类,它会为每个线程都分配一个独立的线程副本从而解决了变量并发访问冲突的问题。ThreadLocal 同时实现了线程内的资源共享。 案例:使用JDBC操作数据库时,会将每一个线程的…

Linux环境基础开发工具使用篇(三) git 与 gdb

一、版本控制器-git 1.简单理解: ①git既是服务端,又是客户端 ②git会记录版本的变化 ③git是一个去中心化的分布式软件 git/gitee 是基于git仓库搭建的网站,让版本管理可视化 2.git 三板斧提交代码 查看安装的git版本 git--version 命令行提交代…

ACM题解Day8 | 最小公倍数 GCD 模块 |最小共倍数,等差数列,后缀表达式

学习目标: 博主介绍: 27dCnc 专题 : 数据结构帮助小白快速入门算法 👍👍👍👍👍👍👍👍👍👍👍👍 ☆*: .。. o(≧▽…

线性表——单链表的增删查改(上)

本节复习链表的增删查改 首先, 链表不是连续的, 而是通过指针联系起来的。 如图: 这四个节点不是连续的内存空间, 但是彼此之间使用了一个指针来连接。 这就是链表。 现在我们来实现链表的增删查改。 目录 本节函数接口列表…

飞机订票系统

飞机订票系统 获取源码——》公主号:计算机专业毕设大全

历尽千辛万苦,终于将CSDN博客等级提升到6级,拥有了自定义域名

近些时间感觉百度对我们个人博客网站不太友好,不单是低质站点被清退,而且正常的站点sitemap.xml权限也被收回或仅剩1条,API普通收录提交数量也猛跌到10条,所以只能多发展其他自媒体平台了。 幸好boke112百科以前玩过一段时间的CS…

紫外-可见吸收光谱法(UV-Vis)是最常用吸收光谱技术 市场持续扩大

紫外-可见吸收光谱法(UV-Vis)是最常用吸收光谱技术 市场持续扩大 紫外-可见吸收光谱法,也称为紫外-可见分光光度法,简称UV-Vis,利用样品分子在紫外和可见光激发下产生电子能级跃迁形成的吸收光谱,对元素进行…

qt debug和release运行都没问题打包之后运行不了

💂 个人主页:pp不会算法^ v ^ 🤟 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 问题 qt debug和release运行都没问题打包之后运行不了 原因 环…

Jquery中的事件与动画

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 本章目标 使用常用简单事件制作网页特效使用鼠标事件制作主导航特效使用hover()方法制作下拉菜单特效使用鼠标事件及动画制作页面特效 一.Jquery事件概述 二.基础事件 鼠标事件 演示案例&…

【激光SLAM】基于图优化的激光SLAM 方法(Grid-based)

文章目录 Graph-based SLAM数学概念 非线性最小二乘(Non-Linear Least Square)解决的问题误差函数线性化流程 非线性最小二乘在SLAM中的应用图的构建(SLAM前端)误差函数误差函数的线性化固定坐标系构建线性系统求解 Cartographer介绍 Graph-based SLAM …

PROTEL

PROTEL是什么 Protel软件是由Altium公司(原为Protel Technology公司)开发的一款电子设计自动化(EDA)软件,主要用于电子电路设计和印制电路板(PCB)制作。 学习Protel 99 SE的大致过程 原理图文…

阿里云服务器ECS u1实例性能怎么样?

阿里云服务器ECS u1实例,2核4G,5M固定带宽,80G ESSD Entry盘优惠价格199元一年,性能很不错,CPU采用Intel Xeon Platinum可扩展处理器,购买限制条件为企业客户专享,实名认证信息是企业用户即可&a…

BIO实战、NIO编程与直接内存、零拷贝深入辨析

BIO实战、NIO编程与直接内存、零拷贝深入辨析 长连接、短连接 长连接 socket连接后不管是否使用都会保持连接状态多用于操作频繁,点对点的通讯,避免频繁socket创建造成资源浪费,比如TCP 短连接 socket连接后发送完数据后就断开早期的http服…

mybatis总结传参三

十、(不推荐)多个参数-按位置传参 参数位置从 0 开始, 引用参数语法 #{ arg 位置 } , 第一个参数是 #{arg0}, 第二个是 #{arg1} 注意: mybatis-3.3 版本和之前的版本使用 #{0},#{1} 方式, 从 myba…

Android基础进阶 - RecyclerView列表加载多类型视图

你是否会经常见到在同一个 RecyclerView 列表中加载多种不同的布局效果?最近写了一篇 ConcatAdapter 相关内容,发现虽然之前一直在使用多类型视图列表,但从未记录过,故重新记录于此 RecyclerView基础 Android进阶之路 - Recycler…