# 防抖&节流
# 防抖
TIP
函数在指定time内只执行一次,time内多次触发,重新计算开始时间。
var debounce = function (fn,time=2000,immediate){
let timeout = null;
return function(){
let context = this;
let args = arguments;
let result
timeout&&clearTimeout(timeout)
if(immediate) {
// 立即执行
if(!timeout) result = fn.apply(context,args);
timeout = setTimeout(()=>{
timeout = null
},time)
}else{
timeout = setTimeout(() => {
fn.apply(context,args)
},time)
return result
}
}
debounce.cancel = function(){
timeout&&clearTimeout(timeout);
timeout = null
}
}
# 节流
TIP
函数在指定time内只执行一次,同一时间内多次触发,只有一次生效。
var throttle = function (fn,time=1000){
let timeout
let start
return function(){
const context = this
const args = arguments
let cur = +new Date
if(!start || cur-start>time){
start = +new Date
return fn.apply(context,args)
}
}
}
var fn = () => {console.log('fn')}
setInterval(throttle(fn),10)
← EventLoop小计 模块化 →