前端经典面试题合集, 什么是防抖和节流?如何用 JS 编码实现?
前端经典面试题合集, 什么是防抖和节流?如何用 JS 编码实现?
QA
Step 1
Q:: 什么是防抖?如何用 JavaScript 实现?
A:: 防抖(Debounce)是一种编程技巧,用于限制某个函数在指定时间内只能执行一次。如果在指定时间内再次触发该函数,会重新计时。通常用于减少函数调用次数,例如搜索输入框的实时搜索。实现代码如下:
function debounce(func, wait) {
let timeout;
return function() {
const context = this, args = arguments;
clearTimeout(timeout);
timeout = setTimeout(() => func.apply(context, args), wait);
};
}
这样,在用户停止输入指定时间后才会执行传入的函数。
Step 2
Q:: 什么是节流?如何用 JavaScript 实现?
A:: 节流(Throttle)也是一种编程技巧,用于限制某个函数在一定时间内最多执行一次。与防抖不同,节流保证函数在指定时间间隔内一定会执行一次。通常用于限制频繁触发的事件,例如滚动事件、窗口调整大小事件。实现代码如下:
function throttle(func, limit) {
let inThrottle;
return function() {
const context = this, args = arguments;
if (!inThrottle) {
func.apply(context, args);
inThrottle = true;
setTimeout(() => inThrottle = false, limit);
}
};
}
这样可以确保函数在指定时间间隔内只执行一次。
用途
防抖和节流在实际开发中非常重要,特别是在处理用户输入、滚动、调整窗口大小等频繁触发的事件时,可以显著提升性能和用户体验。例如,在搜索框中用户输入时,我们希望在用户停止输入后才发起搜索请求(防抖),而在滚动事件中,我们希望每隔一定时间才执行一次事件处理(节流),以减少不必要的计算和渲染。\n相关问题
🦆
如何判断一个变量是否为数组?▷
🦆
如何深拷贝一个对象?▷
🦆
什么是闭包?▷
🦆
如何实现一个简单的事件委托?▷