两者本质上的区别在于: 防抖动是将多次执行变为最后一次执行,节流是将多次执行变成每隔一段时间执行。
// 两个版本
1.非立即执行版本,也就是触发事件后加上wait时间触发函数
// 防抖 延迟执行版本
function shake(fn,wait){
let timeOut;
return ()=>{
let _this = this
let args = arguments
if(timeOut) clearTimeout(timeOut)
timeOut = setTimeout(() => {
fn.apply(_this,args)
}, wait);
}
}
2.立即执行版本,也就是立即事件触发立即会执行函数
// 防抖 立即执行版本
function TODOshake(fn,wait){
let timeOut;
return ()=>{
let _this = this
let args = arguments
if(timeOut) clearTimeout(timeOut)
let TODO = !timeOut
timeOut = setTimeout(() => {
timeOut = null
}, wait);
if(TODO) fn.apply(_this,args)
}
}