防止在一段时间内,频繁调用,在一定延时后调用,下次触发,则清楚计时器,重新延时
//防抖
function debounce(fn, interval) {
var timer = null;
function delay() {
var target = this;
var args = arguments;
return setTimeout(function () {
fn.apply(target, args);
}, interval);
}
return function () {
if (timer) {
clearTimeout(timer);
}
timer = delay.apply(this, arguments);
}
};
二者都可以采用计算时间戳方式采用
节流,在一定时间内,只能调用一次
// 节流
function jieliu(fn,wait){
let timrout;
return function(){
var context = this;
if(!timrout){
timrout = setTimeout(() => {
fn.apply(context,arguments)
},wait);
}
}
}
/**
* 频繁触发的时候,一定时间内只执行一次
* @param {Function} fn 回调函数
* @param {Number} interval 触发间隔
* @returns {function} 执行函数
*/
function throttle(fn, interval){
var timer;
return function(){
var target = this;
if(!timer){
timer = setTimeout(() => {
fn.apply(target, arguments)
}, interval);
}
}
}
网友评论