js写个防抖
时间: 2023-07-08 19:19:33 浏览: 58
好的,以下是 JavaScript 的防抖函数实现:
```javascript
function debounce(func, delay) {
let timeoutId;
return function() {
const context = this;
const args = arguments;
clearTimeout(timeoutId);
timeoutId = setTimeout(() => {
func.apply(context, args);
}, delay);
}
}
```
防抖函数将一个函数包装起来,返回一个新的函数。当新函数被调用时,它会使用 `setTimeout` 函数来等待一段时间,然后再执行原始函数。如果在等待期间多次调用新函数,那么计时器会被重置,不会立即执行原始函数。这样可以避免在某些高频率事件(例如输入框输入、窗口大小调整等)中频繁地调用函数,从而提高性能和用户体验。
相关问题
使用js写一个防抖
防抖(debounce)是一种常见的性能优化方式,它可以限制在一定时间内重复触发某个函数,从而减少不必要的计算和网络请求。下面是使用 JavaScript 实现防抖的示例代码:
```javascript
function debounce(fn, delay) {
let timer = null;
return function() {
const context = this;
const args = arguments;
clearTimeout(timer);
timer = setTimeout(function() {
fn.apply(context, args);
}, delay);
};
}
```
这个函数接受两个参数:一个是要防抖的函数 `fn`,一个是防抖时间 `delay`。它返回一个新的函数,这个函数会在 `delay` 毫秒后执行 `fn` 函数。如果在 `delay` 毫秒内再次调用了这个函数,则会清除之前的计时器并重新计时。
例如,要实现在用户输入时实时搜索,但是不希望用户每输入一个字符就立即发送请求,而是等待用户输入完毕后再发送请求,可以使用防抖来解决:
```javascript
const searchInput = document.querySelector('#search-input');
const searchResult = document.querySelector('#search-result');
function search() {
// 发送搜索请求并更新搜索结果
}
searchInput.addEventListener('input', debounce(search, 500));
```
这样,当用户输入搜索关键词时,每次输入后都会等待 500 毫秒后再发送搜索请求,从而避免了频繁的网络请求。
使用JavaScript写一个防抖代码
在 JavaScript 中实现防抖的方法如下:
```
function debounce(fn, delay) {
let timer = null;
return function() {
const context = this;
const args = arguments;
clearTimeout(timer);
timer = setTimeout(function() {
fn.apply(context, args);
}, delay);
}
}
```
使用方法:
```
const debouncedFunc = debounce(function() {
console.log('Debounced function');
}, 1000);
// 触发 debouncedFunc
debouncedFunc();
// 在1s内触发多次 debouncedFunc,只会在1s之后输出一次
debouncedFunc();
debouncedFunc();
debouncedFunc();
```
防抖函数 debounce 接受两个参数:要进行防抖的函数 fn 和延迟的时间 delay。它返回一个新的函数,这个函数接受的参数和返回值和原函数 fn 一致。在返回的函数中,通过使用 setTimeout 和 clearTimeout 来控制函数的触发。如果在 delay 时间内多次调用返回的函数,那么 clearTimeout 将会清除之前的 setTimeout,并重新设置一个新的 setTimeout。这样就可以保证,在 delay 时间内多次调用返回的函数,只会在 delay 时间过后才会真正执行一次 fn 函数。
阅读全文