我暂时理解的闭包:一个函数中嵌套着另一个函数,这个函数就是闭包。闭包不会内存泄露,也不会被清除。所以不能滥用,滥用会导致内存过大。
//开始学习:
基础的概念:JS的执行上下文。就是JS是有作用域的,一个全局作用域,一个是函数里面的块级作用域。
image.png
日常使用闭包的地方:防抖、节流。
防抖:执行多次后的最后一次。比如10秒内点了10下button,执行的是第十下click事件,在延迟多少秒后。
节流:在10秒内执行第一次点击、在第二个10秒执行第二个10s的第一次点击。
var timer = null, last = 0;
// 节流
throttle(fn, delay) {
return (function(...args) {
var nowTime = Date.now()
if (nowTime - last > delay) {
last = nowTime
fn.call(this, args)
}
})()
},
// 防抖
debounce(fn, delay) {
return (function(...args) {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => {
fn.call(this, args)
}, delay)
})()
}
//调用
fd() {
debounce(fnName, 1000)
},
jl() {
throttle(fnName, 700)
},
以下是我vue3的写法
image.png