返回

前端面试必刷手写题:深入理解防抖和节流

前端

前端面试必刷手写题系列 [2]:防抖和节流

在前端面试中,手写代码题是考察候选人编程能力和对基础概念理解程度的重要环节。其中,防抖和节流是两个经常出现的面试题。本篇博客将深入浅出地解析防抖和节流的概念、实现方式以及应用场景,帮助大家轻松掌握这些必刷手写题。

核心概念

防抖

防抖是一种优化技术,其核心思想是将多次连续触发的函数调用合并为一次。例如,在滚动事件中,如果我们希望在用户停止滚动后才执行某个操作,则可以使用防抖函数。通过设置一个时间间隔,防抖函数会忽略在此时间间隔内连续触发的函数调用,只执行最后一次调用。

节流

节流也是一种优化技术,但其与防抖不同。节流函数会保证在指定时间间隔内只执行一次函数。也就是说,如果在时间间隔内连续触发函数调用,节流函数只执行第一次调用,而忽略后续调用。

实现方式

JavaScript 实现

在 JavaScript 中,我们可以使用 setTimeout() 函数实现防抖和节流。

防抖

function debounce(fn, delay) {
  let timer;
  return function () {
    const args = arguments;
    if (timer) clearTimeout(timer);
    timer = setTimeout(() => {
      fn.apply(this, args);
    }, delay);
  };
}

节流

function throttle(fn, delay) {
  let flag = true;
  return function () {
    const args = arguments;
    if (flag) {
      fn.apply(this, args);
      flag = false;
      setTimeout(() => {
        flag = true;
      }, delay);
    }
  };
}

应用场景

防抖

  • 搜索框输入:在用户输入过程中延迟触发搜索操作,避免频繁查询。
  • 滚动事件处理:在滚动结束后才执行某些操作,如加载更多数据。
  • 窗口大小调整:在窗口大小调整停止后才重新渲染页面。

节流

  • 鼠标移动事件处理:在鼠标移动过程中,每隔一段时间才触发一次事件处理函数。
  • 按钮点击事件处理:防止按钮被快速多次点击,避免触发不必要的操作。
  • 键盘输入事件处理:在用户输入过程中,延迟触发表单验证等操作。

总结

防抖和节流是前端开发中常用的优化技术,可以有效地提高性能和用户体验。通过理解其概念和实现方式,我们可以灵活地应用它们来解决各种问题。掌握这些手写题不仅能帮助我们在面试中脱颖而出,更能提升我们的编程能力和对前端基础的理解。