闭包的概念
可以访问函数内变量的函数叫做闭包,形式上可以看作是函数嵌套函数,内部函数被return
- 关于闭包要注意一个问题变量是否要释放,全局的变量是不会被释放的,因为你不确定是否要释放
- 对于函数来说,函数里面的变量只要该函数被调用了就会释放,闭包除外
function fn() {
let count = 1;
return () => {
count++;
console.log(count, 'count');
};
}
const aa = fn(); //此处调用的是箭头函数
aa(); //2
aa(); //3
闭包的优点和缺点
1.优点:可以隔离作用域,不会造成全局污染
2.缺点:由于闭包长期驻留内存,长期这样会导致内存泄露
在进行性能优化的过程中:使用节流和防抖函数就是用的使用的闭包的原理
防抖:
防抖就是让你多次触发,只生效最后一次,适用于只需要触发一次的场景
function debounce(fn, delay) {
let timer = null;
return function () {
clearTimeout(timer);
timer = setTimeout(() => {
fn.apply(this.arguments);
}, delay);
};
}
节流:
节流是让你的操作,每隔一段时间触发一次,适用于多次触发要多次生效的场景
function throttle(fn, delay) {
let flag = true;
return function () {
if (flag) {
setTimeout(() => {
fn.apply(this.arguments);
flag = true;
}, delay);
flag = false;
}
};
}