防抖(Debounce)和节流(Throttle)是两种常见的优化技术,主要用于控制函数执行频率,特别是在处理高频事件(如滚动、输入等)时。它们的具体含义和使用场景如下:
一 防抖(Debounce)
概念:防抖是指在一定时间内多次触发事件时,只执行最后一次事件。换句话说,只有在事件停止触发后,才会执行指定的函数。
1 使用场景:
搜索框输入建议:用户输入时,只有在停止输入一段时间后才发起搜索请求。
窗口调整大小:在窗口大小调整停止后,再执行相应的处理。
示例代码:
function debounce(func, delay) {let timer;return function(...args) {clearTimeout(timer);timer = setTimeout(() => {func.apply(this, args);}, delay);};
}// 使用示例
const handleResize = debounce(() => {console.log('窗口调整大小');
}, 200);window.addEventListener('resize', handleResize);
二 节流(Throttle)
概念:节流是指在一定时间内,只允许一次事件触发。无论事件触发的频率有多高,都会按固定时间间隔执行函数。
1 使用场景:
滚动监听:在用户滚动页面时,限制某个操作的执行频率。
按钮点击:防止用户快速多次点击按钮。
示例代码:
function throttle(func, delay) {let lastTime = 0;return function(...args) {const now = Date.now();if (now - lastTime >= delay) {lastTime = now;func.apply(this, args);}};
}// 使用示例
const handleScroll = throttle(() => {console.log('页面滚动');
}, 200);window.addEventListener('scroll', handleScroll);
三 总结
防抖:只在事件停止触发后执行函数,适合于输入、搜索等场景。
节流:限制在固定时间间隔内执行函数,适合于滚动、resize 等高频事件。