跳转到内容
返回

关于防抖和节流

防抖和节流

作用

为啥要这么做

使用

防抖

// 保存定时器
let timeout = null;
/**
    des:防抖函数
    @params:{fun:要调用的函数}
    @params:{wait:设置定时器延迟执行的时间}
*/
let debounce = function (fun, wait) {
  // 清除上次保存的定时器
  clearTimeout(timeout);
  // 创建新定时器 并保存
  timeout = setTimeout(() => {
    // 执行要操作的函数
    fun();
  }, wait);
};
// 监听窗口变化事件
window.addEventListener("resize", () => {
  debounce(changeH, 1000);
});

节流

// 节流函数---时间戳版本
// 设置初始化时间
let initDate = Date.now();
/**
    des:防抖函数
    @params:{fun:要调用的函数}
    @params:{wait:设置定时器延迟执行的时间}
*/
let throttleOne = function (fun, wait) {
  // 获取当前时间
  let currentDate = Date.now();
  // 当执行函数的时间戳和第一次的时间戳做差大于设置的周期时,才执行函数,并更新时间戳
  if (currentDate - initDate > wait) {
    fun();
    // 更新初始化的时间为当前时间
    initDate = currentDate;
  } else {
    console.log("没执行");
  }
};
// 监听窗口变化事件
window.addEventListener("resize", () => {
  throttleByTimeStamp(changeH, 1000);
});
// 节流函数---定时器版本
// 用来保存定时器
let timer = null;
let throttleTwo = function (fun, wait) {
  // 定时器存在不执行函数,不存在就执行函数
  if (timer == null) {
    timer = setTimeout(() => {
      fun();
      timer = null;
    }, wait);
  } else {
    console.log("没有执行");
  }
};
// 监听窗口变化事件
window.addEventListener("resize", () => {
  throttleTwo(changeH, 1000);
});

总结

2者的不同

防抖是在一段时间后,一定会执行一次 节流是在一段时间内,一定会执行一次

使用场景

这两种操作要达到的目的是一样的,但是因为特点不同,所以使用场景有时候也会有一点不同; 防抖

节流

学习参考链接

冴羽-重学JS之防抖节流 JS的防抖与节流



上一篇
http协议学习笔记
下一篇
关于call,bind,apply
×