手写javaScript防抖函数
时间: 2023-04-10 17:02:28 浏览: 146
当用户在短时间内频繁触发某个事件时,防抖函数可以将多次触发的事件合并成一次,并在一定时间后执行一次。以下是一个手写的 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);
};
}
```
其中,`func` 是需要执行的函数,`delay` 是防抖的时间间隔。在防抖函数内部,使用 `setTimeout` 来延迟执行 `func` 函数,并在每次触发事件时清除上一次的延时器。最后,返回一个新的函数,用于替代原来的事件处理函数。
相关问题
手写防抖函数
防抖函数的作用是在函数频繁触发时,只执行最后一次触发的函数。这在一些需要减少频繁操作的场景下很有用,比如输入框连续输入时触发搜索操作。
以下是手写的防抖函数代码:
```javascript
function debounce(func, delay) {
let timerId = null;
return function (...args) {
clearTimeout(timerId);
timerId = setTimeout(() => {
func.apply(this, args);
}, delay);
}
}
```
该函数接收两个参数:需要执行的函数 `func` 和延时时间 `delay`,返回一个新的函数。
在新的函数中,使用 `clearTimeout` 函数清除之前设置的定时器,然后重新设置一个新的定时器,延时时间为 `delay`。当定时器触发时,调用 `func` 函数,并传入之前保存的参数 `args`。
使用该函数可以实现防抖效果:
```javascript
const searchInput = document.querySelector('#search-input');
function search() {
console.log('search...');
}
searchInput.addEventListener('input', debounce(search, 500));
```
在输入框连续输入时,只有当输入停止了 500 毫秒后才会触发搜索操作。
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 手写防抖和节流函数的基本实现方法。
阅读全文