当前位置: 首页 > 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.dtcms.com/a/264418.html

相关文章:

  • Python应用指南:利用高德地图API获取公交+地铁可达圈(三)
  • 菜谱大全——字符串处理艺术:从文本解析到高效搜索 [特殊字符][特殊字符]
  • 锂离子电池均衡拓扑综述
  • 阶段二JavaSE进阶阶段之多态、关键字、抽象类 2.3
  • 8.Docker镜像讲解
  • 大模型-分布式论文一瞥
  • twikitFKS: 基于 twikit 2.3.1 的改进版本
  • 【Python】numpy数组常用数据处理(测试代码+api例程)
  • BFD故障检测技术之概述
  • TypeScript 安装使用教程
  • QML通过XMLHttpRequest实现HTTP通信
  • 如何使用bedtools、convert2bed、gff2bed提取基因序列
  • C++ 快速回顾(六)
  • 设计模式精讲 Day 22:模板方法模式(Template Method Pattern)
  • Coze(扣子):基础学习
  • Python应用指南:利用高德地图API获取公交+地铁可达圈(二)
  • OpenCV图像梯度处理详解:原理、API与实战代码解析
  • 【Cyberstrikelab】lab3
  • AngularJS 安装使用教程
  • 转矩常数KT
  • 什么是数据孤岛?如何解决数据孤岛问题?
  • Wisdom SSH 与宝塔面板:深度对比剖析
  • 机器学习在智能教育中的应用:个性化学习路径与学习效果评估
  • socket编程
  • JavaEE线程概念
  • Git 运行.sh文件
  • js filter()
  • Linux 终止进程
  • 【ArcGIS】矢量数据的叠加分析
  • 面试拷打-20250701