interview
frontend-classic
什么是防抖和节流如何用 JS 编码实现

前端经典面试题合集, 什么是防抖和节流?如何用 JS 编码实现?

前端经典面试题合集, 什么是防抖和节流?如何用 JS 编码实现?

QA

Step 1

Q:: 什么是防抖(Debounce)?如何用 JS 实现?

A:: 防抖是一种优化函数执行频率的技术,即让某个函数在特定时间内只执行一次,而不是在某个事件连续触发时频繁执行。常用于处理用户输入、窗口大小调整等场景。用 JS 实现防抖的例子如下:

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

Step 2

Q:: 什么是节流(Throttle)?如何用 JS 实现?

A:: 节流是一种控制函数执行频率的技术,即让某个函数在特定时间间隔内最多执行一次,而不是在某个事件连续触发时频繁执行。常用于滚动事件、窗口大小调整等场景。用 JS 实现节流的例子如下:

 
function throttle(func, limit) {
  let inThrottle;
  return function() {
    const context = this;
    const args = arguments;
    if (!inThrottle) {
      func.apply(context, args);
      inThrottle = true;
      setTimeout(() => inThrottle = false, limit);
    }
  };
}
 

Step 3

Q:: 防抖和节流有什么区别?

A:: 防抖是在事件连续触发时,仅在最后一次触发后的一段时间内才执行函数;节流是在事件连续触发时,每隔固定时间执行一次函数。简单来说,防抖是减少函数执行次数,而节流是限制函数执行频率。

Step 4

Q:: 你在项目中遇到过哪些需要使用防抖或节流的场景?

A:: 例如在搜索框输入时使用防抖,避免用户每输入一个字符都发起一次搜索请求;在滚动事件中使用节流,避免频繁触发滚动处理函数导致性能问题。

用途

面试防抖和节流的相关知识是为了考察候选人对性能优化的理解和实践能力。在实际生产环境中,防抖和节流可以提高页面性能,减少不必要的资源消耗,提升用户体验。这在处理高频率事件如用户输入、滚动、窗口大小调整等场景时尤其重要。\n

相关问题

🦆
如何优化前端性能?

前端性能优化可以通过多种方法实现,包括但不限于减少 HTTP 请求、使用缓存、压缩文件、代码拆分、懒加载资源、优化图片、使用 CDN 等等。

🦆
解释一下事件冒泡和事件捕获

事件冒泡是指事件从目标元素开始,逐级向上传播到不止的祖先元素;事件捕获是从最外层的祖先元素开始,逐级向下传播到目标元素。在现代浏览器中,事件传播的顺序通常是捕获 -> 目标 -> 冒泡。

🦆
什么是闭包?闭包有什么作用?

闭包是指在函数内部定义的函数,可以访问其外部函数的变量。闭包的作用包括创建私有变量、缓存数据、实现模块化等。

🦆
如何使用 asyncawait 优化异步操作?

async/await 是 ES2017 引入的语法,用于更简洁地处理异步操作。通过将函数声明为 async,可以使用 await 关键字等待一个 Promise 的完成,从而使异步代码看起来更像同步代码,提升代码可读性。