返回

代码抗击病毒之-大厂面试必考题总结

前端

在代码世界,有许许多多的“病毒”,时刻威胁着代码的安全。防抖和节流函数,就如同两剂良药,可以帮助开发者抵御这些“病毒”,维护代码的健康。现在,就让我们一起来深入了解这两大函数,掌握它们的原理和用法,为代码保驾护航吧!

防抖函数

防抖函数的作用是,在事件被触发n秒后再执行回调。如果在这n秒内又被触发,则重新计时。这一特性非常适合用于处理频繁触发的事件,比如窗口调整大小、鼠标移动等。通过防抖,我们可以减少不必要的函数调用,提高代码的性能。

原理

防抖函数的原理很简单,它使用了一个定时器。当事件第一次被触发时,它会启动一个定时器,并将回调函数作为参数传递给定时器。如果在定时器超时之前,事件又被触发,那么它会重新启动定时器。只有当定时器超时,才会执行回调函数。

用法

防抖函数的使用也非常简单。我们只需要创建一个防抖函数,并将需要防抖的事件处理函数作为参数传递给它。然后,我们将防抖函数作为事件处理函数注册到事件上。

function debounce(func, wait) {
  let timer;
  return function (...args) {
    clearTimeout(timer);
    timer = setTimeout(() => {
      func.apply(this, args);
    }, wait);
  };
}

// 使用防抖函数处理窗口调整大小事件
window.addEventListener('resize', debounce(function () {
  // 在窗口调整大小n秒后执行回调函数
}, 300));

节流函数

节流函数的作用是,规定在一个单位时间内,只能触发一次函数。如果在这个单位时间内触发多次,则只有第一次的触发会被处理。这一特性非常适合用于处理频繁触发的事件,比如键盘输入、鼠标点击等。通过节流,我们可以减少不必要的函数调用,提高代码的性能。

原理

节流函数的原理也很简单,它使用了一个标记变量来记录函数是否正在执行。当事件被触发时,它会首先检查标记变量是否为true。如果为true,则说明函数正在执行,它会直接返回。如果为false,则说明函数没有正在执行,它会将标记变量设置为true,并执行回调函数。在回调函数执行完成后,它会将标记变量设置为false。

用法

节流函数的使用也同样简单。我们只需要创建一个节流函数,并将需要节流的事件处理函数作为参数传递给它。然后,我们将节流函数作为事件处理函数注册到事件上。

function throttle(func, wait) {
  let isThrottling = false;
  return function (...args) {
    if (isThrottling) {
      return;
    }
    isThrottling = true;
    setTimeout(() => {
      func.apply(this, args);
      isThrottling = false;
    }, wait);
  };
}

// 使用节流函数处理鼠标点击事件
document.addEventListener('click', throttle(function (e) {
  // 在鼠标点击后n秒内只执行一次回调函数
}, 300));

结语

防抖函数和节流函数是两个非常有用的函数,它们可以帮助我们优化代码的性能,提高代码的健壮性。在实际开发中,我们经常会遇到需要使用防抖函数或节流函数的情况。掌握这两个函数的使用方法,将会对我们的开发工作大有裨益。