当前位置: 首页 > news >正文

[面试] 手写题-防抖,节流

防抖:n秒内只执行一次,输入框搜索,窗口resize

事件被触发后,等一段时间(比如300ms)没有再触发时,才执行一次函数。如果在这段时间内又触发了事件,则重新计时。

场景举例

  1. 输入框搜索:用户输入时不马上请求接口,等停止输入一段时间后才发送请求,避免频繁调用接口。
  2. 调整窗口大小:窗口尺寸变化频繁,只在调整停止后执行一次重绘。
function debounce(func, delay) {let timer = null;return function(...args) {clearTimeout(timer);timer = setTimeout(() => {func.apply(this, args);}, delay);};
}

解析

  • timer 用来保存当前计时器。
  • 每次触发函数时,先清除旧的计时器。
  • 设置新的计时器,延迟 delay 毫秒后执行目标函数 func。
  • apply(this, args) 保持调用时的上下文和参数。

节流 每隔n秒执行一次,滚动

保证在一个固定时间间隔内,函数最多执行一次。即使触发事件很多,函数调用频率也会被限制。

场景举例
滚动加载:监听滚动事件时,不想频繁调用函数,节省性能。
按钮连续点击防止多次提交。

function throttle(func, delay) {let lastTime = 0;return function(...args) {const now = new Date.getTime();if (now - lastTime >= delay) {lastTime = now;func.apply(this, args);}};
}

解析

  • lastTime 记录上一次执行函数的时间戳。
  • 当前时间 now 减去 lastTime 大于等于间隔时,执行函数,并更新时间戳。
  • 其他触发在这段时间内的调用都会被忽略。



参考:

【JS】防抖(debounce)和节流(throttle)

JavaScript 防抖 - Web前端工程师面试题讲解-b站
JavaScript 节流 - Web前端工程师面试题讲解-b站

http://www.lqws.cn/news/603613.html

相关文章:

  • Vue 安装使用教程
  • 小白成长之路-Mysql数据库基础(二)
  • uniapp内置蓝牙打印
  • jQuery UI 安装使用教程
  • Leetcode力扣解题记录--第49题(map)
  • 电源芯片之DCDC初探索ING
  • 数据结构:递归:组合数(Combination formula)
  • 深度学习常见的激活函数
  • 2025年7月最新英雄联盟战绩自动查询工具
  • [创业之路-458]:企业经营层 - 蓝海战略 - 重构价值曲线、整合产业要素、创造新需求
  • 技术学习_人工智能_1_神经网络是如何实现的?
  • 设计模式精讲 Day 22:模板方法模式(Template Method Pattern)
  • 在 Docker 容器中使用内网穿透
  • 论文阅读:BLIPv1 2022.2
  • 使用 StatsD 向 TDengine 写入
  • Python应用指南:利用高德地图API获取公交+地铁可达圈(三)
  • 黑马python(二十三)
  • 【王阳明代数集合代数基础】文化资本理论实体意气感知评定亲疏情感偏序集,实例《临江仙》讲解情感分析之数据结构的演变
  • LL面试题11
  • 【Python】numpy数组常用数据处理(测试代码+api例程)
  • Git 运行.sh文件
  • 2025 推理技术风向标:DeepSeek-R1 揭示大模型从 “记忆” 到 “思考” 的进化路径
  • 基于SpringBoot + HTML 的网上书店系统
  • JavaEE线程概念
  • Yolov7训练自己的数据集和ONNX/TRT部署
  • MongoDB 常用增删改查方法及示例
  • C++ 快速回顾(六)
  • 数据结构与算法 第二章 线性表
  • CMS、OA、CRM、ERP 是什么意思?区别在哪里
  • CentOS Stream 下 Nginx 403 权限问题解决