ES6提供了防抖函数和节流函数来控制函数的执行频率。
- 防抖函数(Debounce):在一定时间内,只执行最后一次触发的函数。
```javascript
function debounce(func, delay) {
let timer;
return function (...args) {
clearTimeout(timer);
timer = setTimeout(() => {
func.apply(this, args);
}, delay);
};
}
```
使用示例:
```javascript
function handleInput() {
console.log('Input changed');
}
const debouncedHandleInput = debounce(handleInput, 500);
document.getElementById('input').addEventListener('input', debouncedHandleInput);
```
- 节流函数(Throttle):在一定时间内,固定间隔执行函数。
```javascript
function throttle(func, limit) {
let inThrottle;
return function (...args) {
if (!inThrottle) {
func.apply(this, args);
inThrottle = true;
setTimeout(() => {
inThrottle = false;
}, limit);
}
};
}
```
使用示例:
```javascript
function handleScroll() {
console.log('Scrolling');
}
const throttledHandleScroll = throttle(handleScroll, 500);
window.addEventListener('scroll', throttledHandleScroll);
```
这两个函数可以帮助我们优化一些需要控制函数执行频率的场景,比如输入框输入验证、滚动事件处理等。