概要
- 闭包:一个函数内声明另一个函数
- 特点:闭包资源会一直存在,不会自动释放,必须手动释放,否则会一直占用内存
- 释放内存的方法:执行完之后,将最外层调用设置为null
- 优点:
- 保护函数内的变量安全,防止变量被污染,实现封装
- 缓存数据,在内存中维持一个变量
- 缺点:
- 使用多了就会占用大量内存造成内存泄漏,要适当的使用
- 使用场景:模拟块级作用域/缓存数据,实现封装
示例
- 防抖 利用了闭包的方式实现
- 好处:将timer变量保存在内存中,只需要执行一次const d = debounce(),在以后需要的时候再调用d(),这样函数中的timer就不会是null,就是上次生成的值,一直保存在内存中保护了变量,就这样实现了封装。
export function debounce(fn, dealy) {
let timer = null;
return function() {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(fn, dealy)
}
}
使用方法:
const d = debounce(()=>{
console.log('回调')
},300);
// 假设在input输入的时候调用d(),这样就实现了防抖的功能
$('.input').on('input',()=>{
d();
})