js如何实现防抖函数 防抖函数的3种经典实现方案

防抖函数的核心是延迟执行并重置计时,适用于搜索建议等场景。具体实现通过settimeout延迟触发函数,若再次触发则清除原定时器并重新计时。对于需要立即执行的情况,可引入isinvoked变量控制首次执行。同时可通过添加cancel方法实现手动取消。使用apply确保上下文和参数正确传递。防抖与节流的区别在于防抖保证最后一次触发有效,而节流确保一段时间内仅执行一次。常见应用场景包括搜索建议、窗口调整、按钮防重复点击、文本自动保存等。

js如何实现防抖函数 防抖函数的3种经典实现方案

防抖函数的核心在于:在事件触发后,不是立即执行,而是等待一段时间,如果在这段时间内再次触发,就重新计时。最终只执行最后一次触发。

js如何实现防抖函数 防抖函数的3种经典实现方案

解决方案

防抖的本质是延迟执行,并且在延迟的过程中,如果再次触发,则重新计时。理解这一点,实现防抖就变得简单了。

js如何实现防抖函数 防抖函数的3种经典实现方案

function debounce(func, delay) {  let timeoutId;  return function(...args) {    const context = this;    clearTimeout(timeoutId);    timeoutId = setTimeout(() => {      func.apply(context, args);    }, delay);  };}// 示例function sayHello(name) {  console.log(`Hello, ${name}!`);}const debouncedHello = debounce(sayHello, 300);// 模拟事件触发debouncedHello("Alice");debouncedHello("Bob");setTimeout(() => debouncedHello("Charlie"), 200); // 会取消Bob的执行setTimeout(() => debouncedHello("David"), 500); // 延迟500ms,会执行

如何使用立即执行的防抖函数?

有时候,我们希望第一次触发事件时立即执行,而不是等待。可以修改防抖函数来实现:

js如何实现防抖函数 防抖函数的3种经典实现方案

function debounceImmediate(func, delay) {  let timeoutId;  let isInvoked = false;  return function(...args) {    const context = this;    if (!isInvoked) {      func.apply(context, args);      isInvoked = true;    }    clearTimeout(timeoutId);    timeoutId = setTimeout(() => {      isInvoked = false;    }, delay);  };}// 示例function sayHelloImmediate(name) {  console.log(`Hello (Immediate), ${name}!`);}const debouncedHelloImmediate = debounceImmediate(sayHelloImmediate, 300);debouncedHelloImmediate("Eve"); // 立即执行debouncedHelloImmediate("Frank"); // 不会立即执行,但会重置计时setTimeout(() => debouncedHelloImmediate("Grace"), 500); // 延迟500ms后执行

关键在于引入一个isInvoked变量,控制首次是否立即执行。这种方式适用于需要立即响应的场景,例如搜索框输入。

如何取消防抖函数的执行?

某些情况下,我们需要手动取消防抖函数的执行。可以给防抖函数添加一个cancel方法:

function debounceWithCancel(func, delay) {  let timeoutId;  function debounced(...args) {    const context = this;    clearTimeout(timeoutId);    timeoutId = setTimeout(() => {      func.apply(context, args);    }, delay);  }  debounced.cancel = () => {    clearTimeout(timeoutId);  };  return debounced;}// 示例function sayHelloCancelable(name) {  console.log(`Hello (Cancelable), ${name}!`);}const debouncedHelloCancelable = debounceWithCancel(sayHelloCancelable, 300);debouncedHelloCancelable("Henry");setTimeout(() => debouncedHelloCancelable.cancel(), 200); // 取消执行setTimeout(() => debouncedHelloCancelable("Ivy"), 500); // 延迟500ms,会执行

这种方式为防抖函数提供了一个额外的控制手段,可以在需要的时候阻止函数的执行。

为什么要使用apply而不是直接调用func()?

使用apply可以确保函数在正确的上下文中执行,并传递正确的参数。apply允许我们指定this的值(即上下文)和参数数组。这在处理事件监听器等场景时非常重要,因为我们需要确保函数在触发事件的元素上下文中执行。如果直接调用func()this的值可能会指向全局对象(例如window),导致错误。

防抖和节流的区别是什么?

防抖和节流都是为了优化性能,减少函数执行频率的技术,但它们的策略不同。

防抖 (Debounce): 在事件被触发后,延迟一段时间执行,如果在这段时间内事件再次被触发,则重新计时。最终只执行最后一次触发。适用于搜索建议、调整窗口大小等场景。节流 (Throttle): 在一段时间内,只允许函数执行一次。如果在该时间段内事件被多次触发,只有第一次触发会被执行。适用于滚动事件、鼠标移动等场景。

简单来说,防抖是“最后一次有效”,节流是“一段时间内只执行一次”。

防抖函数的常见应用场景有哪些?

搜索建议: 用户在输入框中输入内容时,不需要每次输入都发送请求,而是等待用户停止输入一段时间后,再发送请求获取搜索建议。调整窗口大小: 在调整窗口大小的过程中,不需要每次调整都重新计算布局,而是等待调整完成后,再重新计算布局。按钮点击: 防止用户快速多次点击按钮,导致重复提交表单或执行其他操作。文本编辑器自动保存: 用户编辑文本时,不需要每次修改都保存,而是等待用户停止编辑一段时间后,再自动保存。

以上就是js如何实现防抖函数 防抖函数的3种经典实现方案的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/161860.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年10月31日 21:15:01
下一篇 2025年10月31日 21:20:28

相关推荐

  • 什么是区块链+跨境支付

    “区块链+跨境支付”指的是将区块链技术引入到跨境支付的场景中。这种结合被认为是一个具有革命性潜力的应用方向,甚至有可能重塑当前的全球金融体系。为什么会这样说呢?因为区块链技术能够跳过现有的SWIFT系统,从根本上解决跨境汇款中的资金清算问题。下面我们来深入分析一下。 传统的跨境转账方式通常需要用户亲…

    好文分享 2025年12月8日
    000
  • 区块链的特点 – 去中心化

    从PC互联网到移动互联网,从电商到云计算,20岁的阿里可以说是具备了非常敏感的技术嗅觉,没有错过任何一个时代风口,而这一次,阿里盯上了区块链。马云曾表示对于阿里巴巴来说,区块链不是一座金矿,而是一个解决方案,阿里巴巴必须要有区块链,没有区块链是会死人的。 当然这句话可能有些夸张,但绝不是一句空话,毕…

    2025年12月8日
    000
  • 什么是共识机制?

    大家好,我是小K君。今天我们来聊一聊:共识机制到底是什么? 回顾上一节课我们提到过,分布式网络面临的一个核心难题就是“拜占庭将军问题”。而区块链作为分布式系统的代表,通过一系列创新技术解决了这一问题,其中最关键的手段之一便是——共识机制。 通俗地讲,共识机制是一套所有节点都必须遵循的规则体系。它也是…

    2025年12月8日
    000
  • 区块链为什么叫区块链?

    2009年1月3日,中本聪在芬兰赫尔辛基的一台小型服务器上挖出了首批比特币,标志着比特币的正式诞生。到了2010年5月22日,一位程序员用1万枚比特币购买了两块披萨,这是比特币首次被赋予现实中的价格。作为区块链技术的第一个实际应用,比特币广为人知,但其背后的区块链技术却并不为大众所深入了解。那么,这…

    2025年12月8日
    000
  • 狗狗币最新减半时间_狗狗币会不会像比特币一样减半

    【权威推荐】2025主流数字货币交易平台合集 Binance币安 官网直达: 安卓安装包下载: 欧易OKX ️ 官网直达: 安卓安装包下载: Huobi火币️ 官网直达: 安卓安装包下载: 狗狗币最新减半时间及是否会像比特币一样减半解析 狗狗币(DOGE)作为一种流行的加密货币,其减半机制备受投资者…

    2025年12月8日
    000
  • Synthetix Network (SNX) 价格预测 2025:未来价格走势如何?

    Synthetix Network (SNX) 价格预测 2025:未来价格走势如何? 随着比特币逼近 11 万美元大关及 Web3 生态的技术突破,去中心化金融(DeFi)赛道正重回市场焦点。作为合成资产协议龙头,Synthetix Network(SNX)凭借其独特的衍生品交易模型,成为投资者关…

    2025年12月8日
    000
  • GMT 价格预测 2025-2031:STEPN 价格会大幅飙升吗?

    在美国证券交易委员会批准比特币现货etf和以太坊etf后,山寨币获得了动能。尽管市场上卖压增加,stepn 的价格仍然保持在 $0.05 的门槛附近。 StepN 将健身与区块链技术结合在其 Move2Earn NFT 游戏中,用户通过过着积极的生活方式赚取加密奖励。玩家购买 NFT 球鞋,并在走路…

    2025年12月8日 好文分享
    000
  • 为什么XRP价格在下跌?能突破2美元吗?XRP币7月价格预测

    目录 监管重压:全球围剿引发信任危机市场环境剧变:竞争赛道全面失守技术停滞:生态创新动力枯竭市场情绪与技术信号恶化2025 年 7 月 XRP 价格预测结语 截至 2025 年 7 月 1 日,xrp 价格徘徊在 2.23 美元左右,较此前高点大幅下滑,甚至在 6 月中旬一度出现单日暴跌 10%。这…

    2025年12月8日 好文分享
    000
  • BBSOL 代币是什么? Bybit 推出的Solana 流动质押方案全解析(2025 最新)

    在solana 区块链上,有愈来愈多使用者开始关注一种新型代币:「流动性质押代币」(lst, liquid staking token)。 其中由Bybit 推出的bbSOL,就是近期话题度很高的一个例子。 对许多初次接触这类产品的新手来说,可能会好奇:bbSOL 到底是什么?持有它有什么用途?又是…

    2025年12月8日
    000
  • 2025年最佳比特币期货交易所,十大最佳交易所汇总

    2025年最佳比特币期货交易所有哪些?btc 期货的十大最佳交易所汇总 比特币期货已获得广泛采用,并在很大程度上推动了全球加密货币交易市场在2025年达到290亿美元的规模,预计年增长率将超过20%。2025年春季,加密货币衍生品交易量同比增长129%。 2025年最佳比特币期货交易所,十大最佳交易…

    2025年12月8日
    000
  • 索拉纳(SOL)价格在ETF消息后反弹至161美元,但涨势能否持续?

    Solana的ETF推出引发短暂反弹,但在竞争激烈的环境下,基本面和机构需求仍然疲弱 Solana的原生代币SOL在周一确认首只具备质押功能的Solana交易所交易基金(ETF)将于周三推出后暴涨7%。这一消息促使交易者猜测它是否能刺激机构需求并推动SOL价格突破200美元。 SOL/USD,12小…

    2025年12月8日 好文分享
    000
  • 币圈交易所是什么平台 币圈交易所的主要类型和功能

    本文将围绕币圈交易所的概念、主要类型及其核心功能进行系统性的阐述,旨在帮助您理解这一数字资产世界中的核心基础设施。我们将首先定义什么是交易所,随后分类介绍其主要形态,并分步解析其承担的关键职能,让您对整个运作流程有一个清晰的认识。 2025主流加密货币交易所官网注册地址推荐: 欧易OKX: Bina…

    2025年12月8日
    000
  • 柴犬币(Shiba Inu):价格下跌导致盈利能力骤降——还有希望吗?

    柴犬币价格下滑致盈利承压,人工智能融合或成新转机。“jul-ai”是否能带来转机? 柴犬币(Shiba Inu)的发展道路一向波澜起伏,近期更是陷入下行趋势。随着价格不断走低,SHIB持有者是否还有利好消息?我们一起来深入探讨。 柴犬币的价格困境:深度分析 目前,柴犬币(SHIB)的交易价维持在约0…

    2025年12月8日
    000
  • 什么是Web3.0?去中心化互联网的未来图景

    web3.0 被构想为互联网演进的下一个阶段,其核心理念在于构建一个去中心化的网络环境。它不同于早期以静态信息为主的 web1.0,也区别于由大型平台主导的 web2.0。 web3.0 的出现,很大程度上是技术发展特别是区块链技术应用的自然延伸。它试图将互联网的权力从中心化的机构手中分散开来,赋予…

    2025年12月8日
    000
  • 2025年加密货币平台交易量对比报告 比特币与山寨币交易活跃度差异分析

    进入2025年,全球加密货币市场的格局呈现出高度动态化与复杂化的特征。衡量一个加密货币交易平台成功与否的核心指标,交易量,直观地反映了其市场深度、用户信任度以及资本吸引力。 2025主流加密货币交易所官网注册地址推荐: 欧易OKX: Binance币安: Gateio芝麻开门: 火币htx:[ 本报…

    2025年12月8日
    000
  • 什么是稳定币?深入解析USDT、USDC等主流稳定币

    加密货币市场的显著特征之一是其高度的波动性。像比特币、以太坊这样的数字资产,价格可能在短时间内经历剧烈波动。这种固有的波动性使得加密货币在需要稳定价值的场景中难以直接应用,例如进行日常支付、签订长期合约或在市场下行时作为可靠的价值储存手段。 为了解决这一问题,稳定币应运而生。稳定币是一种特殊类型的加…

    2025年12月8日
    000
  • 虚拟币一级市场与二级市场区别?虚拟币交易平台解析

    虚拟币一级市场与二级市场在参与门槛、风险收益及流动性等方面存在显著差异。1. 一级市场门槛高,需特定渠道或白名单,而二级市场只需注册平台即可交易;2. 一级市场风险极高,项目可能归零,二级市场虽波动大但信息更透明;3. 一级市场潜在回报巨大,代币上市后可能暴涨,二级市场回报相对有限;4. 一级市场流…

    2025年12月8日
    000
  • 稳定币和其他加密货币的区别是什么_稳定币和其他加密货币有哪些不同

    一键直达|2025主流加密资产交易所平台 Binance币安 Huobi火币 欧易OKX 稳定币与其他加密货币的主要区别体现于价格稳定性、用途定位及背后机制等方面。理解这些差异,有助于合理配置数字资产组合。 价格波动性 稳定币:通常锚定法定货币(如美元),价格相对固定,波动极小。其他加密货币:如比特…

    2025年12月8日
    000
  • BTC现货交易和期货合约有什么区别_BTC现货和期货怎么选择

    一键直达|2025主流加密资产交易所平台 Binance币安 Huobi火币 欧易OKX BTC现货交易与期货合约的区别解析,帮助投资者了解两种交易方式的核心差异及适用场景。 BTC现货交易 交易实物资产:现货交易是买卖真实的比特币,交易完成后资产直接转入账户钱 包。无杠杆风险:交易时只使用自有资金…

    2025年12月8日
    000
  • 2025年哪些虚拟币值得买?十大潜力币排名榜单

    在瞬息万变的加密货币市场,寻找有潜力的虚拟币,如同大海捞针。2025年,哪些虚拟币有望崭露头角,实现价值腾飞?这不仅仅是技术进步的较量,更是生态建设、社区活跃度、市场应用等多维度的综合考量。本文将深入剖析当前市场格局,为您揭示备受瞩目的十大潜力币,并提供详细的购买指引,助您把握投资先机。 2025年…

    2025年12月8日 好文分享
    000

发表回复

登录后才能评论
关注微信