请用javaScript写出防抖和节流函数
时间: 2023-02-26 10:55:11 浏览: 61
防抖函数:
```
function debounce(fn, wait) {
let timeout;
return function() {
clearTimeout(timeout);
timeout = setTimeout(() => {
fn.apply(this, arguments);
}, wait);
};
}
```
节流函数:
```
function throttle(fn, wait) {
let inThrottle;
return function() {
if (!inThrottle) {
fn.apply(this, arguments);
inThrottle = true;
setTimeout(() => (inThrottle = false), wait);
}
};
}
```
相关问题
js 手写防抖和节流函数
好的,我可以回答你关于 JavaScript 手写防抖和节流函数的问题。
先,防抖和节流函数是为了解决高频率触发某个事件时,减少事件触发的次数,提高性能而设计的。
防抖函数的作用是在某个函数触发后,延迟一定的时间再执行这个函数,若在延迟时间内,这个函数又被触发,则重新计时,最后只会执行一次这个函数。以下是防抖函数的示例代码:
```javascript
function debounce(func, delay) {
let timer = null;
return function () {
const context = this;
const args = arguments;
clearTimeout(timer);
timer = setTimeout(function () {
func.apply(context, args);
}, delay);
};
}
```
节流函数的作用是在某个函数触发后,不立即执行这个函数,而是等到一定的时间后,才执行这个函数,若在等待时间内,这个函数又被触发,则忽略这个函数的执行。以下是节流函数的示例代码:
```javascript
function throttle(func, delay) {
let timer = null;
return function () {
const context = this;
const args = arguments;
if (!timer) {
timer = setTimeout(function () {
func.apply(context, args);
timer = null;
}, delay);
}
};
}
```
以上就是 JavaScript 手写防抖和节流函数的基本实现方法。
用javascript实现防抖和节流
防抖和节流是优化 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 毫秒后才会调