去抖函数
debounce(func, delay) {
let timer = null
// 这个东西就是一个闭包 因该吧
return function(...args) {
// 如果有timer的话我们就会清除掉timer
if( timer ) clearTimeout(timer)
timer = setTimeout(() => {
func.apply(this, args)
}, delay);
}
}
调用
const 防抖动函数包装 = this.debounce("想要防抖动的函数", 500)
// 我们这个函数的返回值就是里面debounce返回的函数
// 然后这里我们就可以高频率的调用对应的函数
防抖动函数包装()
func 就是想要防抖动的函数 这个函数
我们第一次调用的时候它就会对timer进行赋值, 并且开始记时
第二次来到的时候我们还是调用的同一个返回的函数, 所以我们而timer这个变量是闭包函数中的变量, 对于返回的函数而言它就像一个全局变量
所以如果时间没有结束的话timer, 它就会清除上一次的记时, 然后重新开始记时
所以如果在延迟时间内没有计时结束它就会一直刷新计时
本来这个Timer是一个局部变量但是它很久都没有销毁
我们内部的闭包对外层的, 的变量做了一个引用这个时候这个函数作用作用域就没有销毁, 变量的引用依久存在