1、节流
在工作中常见的一个场景,input输入框输入完成后,会发起搜索请求,因此我们可以规定好一个时间比如500ms就可以发起以此请求,因此在这500ms中你不能在发起请求,就像有一个定时阀门一样,到点才打开,因此将这样方式叫做节流,一句话总结:
//节流就是「技能冷却中」
const throttle = (f, time) => {
let timer = null
return (...args) => {
if(timer) {return}
f.call(undefined, ...args)
timer = setTimeout(()=>{
timer = null
}, time)
}
}
2、防抖
防抖就像是游戏里面的回城,触发回城只算最后一次,不停触发就打断回城,重新计时;常用场景:手机号邮箱的输入检测
const debounce = (fn, time) => {
let 回城计时器 = null
return (...args)=>{
if(回城计时器 !== null) {
clearTimeout(回城计时器) // 打断回城
}
// 重新回城
回城计时器 = setTimeout(()=>{
fn.call(undefined, ...args) // 回城后调用 fn
回城计时器 = null
}, time)
}
}