用javascript实现防抖和节流
时间: 2023-03-14 21:35:30 浏览: 81
防抖和节流是优化 JavaScript 代码性能的两个重要技术,它们可以控制函数的执行频率,从而提高代码的响应速度和性能。下面是用 JavaScript 实现防抖和节流的示例代码:
## 防抖
防抖可以控制一个函数在一段时间内只执行一次,常用于输入框搜索、滚动加载等场景。以下是一个基本的防抖函数实现:
```javascript
function debounce(func, delay) {
let timerId;
return function(...args) {
if (timerId) {
clearTimeout(timerId);
}
timerId = setTimeout(() => {
func.apply(this, args);
timerId = null;
}, delay);
};
}
```
这个函数接收两个参数,第一个参数是要进行防抖处理的函数,第二个参数是等待时间。该函数返回一个新的函数,每次调用这个新的函数时,会启动一个计时器,等待指定的时间后才会执行传入的函数。
例如,假设我们有一个搜索函数 search(),需要防抖处理,等待 500 毫秒后执行。可以这样调用:
```javascript
const debouncedSearch = debounce(search, 500);
input.addEventListener('input', event => {
debouncedSearch(event.target.value);
});
```
上面的代码将输入框的输入事件绑定到 debouncedSearch 函数上,每次输入事件发生时,debouncedSearch 函数会启动一个计时器,等待 500 毫秒后才会调用 search 函数。如果在 500 毫秒内再次输入事件发生,计时器会被重置,等待时间重新开始计算。
## 节流
节流可以控制一个函数在一段时间内最多执行一次,常用于滚动事件、resize 事件等场景。以下是一个基本的节流函数实现:
```javascript
function throttle(func, delay) {
let timerId;
return function(...args) {
if (timerId) {
return;
}
timerId = setTimeout(() => {
func.apply(this, args);
timerId = null;
}, delay);
};
}
```
这个函数接收两个参数,第一个参数是要进行节流处理的函数,第二个参数是等待时间。该函数返回一个新的函数,每次调用这个新的函数时,会启动一个计时器,如果计时器已经启动,就直接返回,否则会等待指定的时间后才会执行传入的函数。
例如,假设我们有一个图片懒加载函数 lazyLoad(),需要节流处理,等待 200 毫秒后执行。可以这样调用:
```javascript
const throttledLazyLoad = throttle(lazyLoad, 200);
window.addEventListener('scroll', throttledLazyLoad);
```
上面的代码将滚动事件绑定到 throttledLazyLoad 函数上,每次滚动事件发生时,throttledLazyLoad 函数会启动一个计时器,等待 200 毫秒后才会调
阅读全文