优秀的编程知识分享平台

网站首页 > 技术文章 正文

【JavaScript原生】面试了那么多次,你真的会写一个防抖功能吗

nanyue 2024-08-29 20:58:40 技术文章 5 ℃

防抖(debounce)是一种在前端开发中常用的技巧,用于减少事件处理器被频繁调用的次数,提高性能和用户体验。在JavaScript中,防抖可以通过使用setTimeout函数和clearTimeout函数来实现。下面是对防抖的深入了解和举例说明。

一、防抖原理

防抖是通过在事件处理器调用之后,设置一个延迟时间(称为防抖时间),在这个延迟时间内,如果再次触发事件,则重新计算延迟时间。当延迟时间结束后,事件处理器才会被真正执行。如果在这个过程中又触发了事件,那么就会重新计算延迟时间,直到没有新的触发事件为止。

二、实现防抖

下面是一个简单的防抖实现:

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

在这个实现中,我们创建了一个debounce函数,该函数接受一个要防抖的函数和一个延迟时间作为参数。在返回的函数中,我们使用了clearTimeout函数来清除上一次的定时器,并重新设置一个新的定时器来执行要防抖的函数。

三、举例说明

下面我们来看一个实际应用防抖的例子:

  1. 输入框实时搜索

在一个网站上,当用户在搜索框中输入文字时,我们希望在用户输入完毕后,延迟一段时间再执行搜索请求,避免用户还没输入完毕就发送请求,从而提高性能和用户体验。

const searchInput = document.getElementById('searchInput');
const debouncedSearch = debounce(function() {
  // 执行搜索请求
  console.log(searchInput.value);
 }, 500);
searchInput.addEventListener('input', debouncedSearch);

在这个例子中,我们获取了一个输入框元素,然后定义了一个防抖的搜索函数debouncedSearch,并设置了延迟时间为500毫秒。最后,我们给输入框添加了一个input事件监听器,当用户输入时就会触发防抖的搜索函数。

总结:
通过使用防抖技巧,我们可以减少事件处理器被频繁调用的次数,提高性能和用户体验。在JavaScript中,我们可以使用setTimeout函数和clearTimeout函数来实现防抖。在具体应用中,我们可以将防抖应用于输入框实时搜索、窗口滚动、窗口大小调整等场景中。

最近发表
标签列表