防抖函数
只要持续触发就不执行,n秒内未触发才执行。将执行次数降低到1次(不设置立即执行)
function debounce(func,wait,immediate){
let timeout;
return function(){
let context = this;
let args = arguments;
if(timeout)
clearTimeout(timeout)
if(immediate){
//立即执行
let callNow = !timeout;
timeout = setTimeout(function(){
timeout = null;
}, wait)
if(callNow)
func.apply(context,args)
}else{
timeout = setTimeout(function(){
func.apply(context,args);
},wait)
}
}
}
节流函数
持续触发时,一段时间内只执行一次
1 时间戳方式
function throttle(func,wait){
var context,args;
var previous = 0;
return function(){
var now = +new Date()
context = this;
args = arguments;
if(now - previous > wait)
func.apply(context,args);
}
}
2 定时器方式
function throttle(func,wait){
var context,args;
var timeout;
return function(){
context = this;
args = arguments;
if(!timeout){
timeout = setTimeout(function(){
timeout = null;
func.apply(context, args)
}, wait);
}
}
}