JavaScript 的节流与防抖

js 复制代码
// 函数防抖: 在事件被触发 n 秒后再执行回调,如果在这 n 秒内事件又被触发,则重新计时。

// 函数节流: 规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效。

// 函数防抖的实现
function debounce(fn, wait) {
  var timer = null;

  return function () {
    var context = this,
      args = arguments;

    // 如果此时存在定时器的话,则取消之前的定时器重新记时
    if (timer) {
      clearTimeout(timer);
      timer = null;
    }

    // 设置定时器,使事件间隔指定事件后执行
    timer = setTimeout(() => {
      fn.apply(context, args);
    }, wait);
  };
}

// 函数节流的实现;
function throttle(fn, delay) {
  var preTime = Date.now();

  return function () {
    var context = this,
      args = arguments,
      nowTime = Date.now();

    // 如果两次时间间隔超过了指定时间,则执行函数。
    if (nowTime - preTime >= delay) {
      preTime = Date.now();
      return fn.apply(context, args);
    }
  };
}

函数防抖是指在事件被触发 n 秒后再执行回调,如果在这 n 秒内事件又被触发,则重新计时。这可以使用在一些点击请求的事件上,避免因为用户的多次点击向后端发送多次请求。

函数节流是指规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效。节流可以使用在 scroll 函数的事件监听上,通过事件节流来降低事件调用的频率。

相关推荐
孤月葬花魂几秒前
深度解析:如何用Vue3+TS封装高性能的useEcharts Hook
前端·vue.js
架构个驾驾几秒前
ES6中Set和Map数据结构的全面解析
前端
不要额外加糖2 分钟前
CSS手残党救星:motion-v 助你写出流畅丝滑的动画
前端·javascript·vue.js
北京_宏哥2 分钟前
🔥Jmeter(十一) - 从入门到精通 - JMeter逻辑控制器 - 下篇(详解教程)
前端·jmeter·面试
天神下凡_2 分钟前
开发助手:浏览器插件-沉浸式翻译
前端·chrome
Monly216 分钟前
Uniapp:确认框
开发语言·javascript·uni-app
奇舞精选7 分钟前
Cursor MCP 推荐
前端·mcp
还是鼠鼠10 分钟前
Node.js Session 原理简单介绍 + 示例代码
linux·javascript·vscode·node.js·编辑器·vim·express
前端 贾公子11 分钟前
解决 Vue 中 input 输入框被赋值后,无法再修改和编辑的问题
javascript·vue.js·elementui
前端小菜鸡zhc15 分钟前
前端JavaScript应知应会
javascript