防抖(多次操作只执行最后一次,重新计时)
// 防抖函数 只执行一段时间内的最后一次
function debounce(fn,times){
let timer = null
return function(...args){
if (timer) clearTimeout(timer)
timer = setTimeout(()=>{
fn.call(this,...args)
},times)
}
}
节流(一段时间内多次操作只执行第一次)
// 要保证this指向触发的事件对象
// 节流函数 只执一段时间内的第一次
function throttled(fn,times){
let timer = null
return function(...args){
if(timer) return
timer = setTimeout(()=>{
fn.call(this,...args)
timer = null //只是清除了引用
},times)
}
}
都使用到了闭包
闭包保存了变量词法环境,延长变量的生命周期,不被销毁,否则每次都是不同的计时器
闭包
- 延长变量的生命周期
- 创建私有环境