1、闭包的概念
闭包:函数嵌套函数,内层函数访问了外层函数的局部变量。
// 闭包
function func1() {
let a = 9;
let b = 8;
function func2() {
console.log("a", a); // a 9
}
func2();
}
func1();
分析:
需要访问的变量会被放到闭包空间 Closure ,比如上面的变量a。
闭包空间不会随着当前函数的结束而释放:上面的func1()执行完后,变量b已经被释放了,但是变量a不会被释放,又因为a不会被释放,也导致了内存泄漏😮💨
内存泄漏:本该被回收的内存没有被回收就是内存泄漏。
但是也要看有没有必要产生内存泄漏,如果产生的是bug就不可以,但是上面的案例是语言特性本身的特点导致的内存泄漏,是我们无法阻止的泄漏,所以必须用闭包的时候还是得用闭包。
控制台如何查看闭包空间:
2、闭包的作用
实现变量的私有化,让外面的人无法修改内部的变量。
举例:如果变量count不想被外面的人修改,可以放在闭包空间里面。
function getCount() {
let count = 0;
function fn() {
count++;
console.log(`count被调用了${count}次`);
}
return fn;
}
const result = getCount();
result(); // count被调用了1次
result(); // count被调用了2次
result(); // count被调用了3次
3、闭包会产生什么现象或问题
(1)由于闭包空间的内存无法及时地释放,因此会导致内存泄漏,但这个又是必要的,也是闭包的一个特点。
(2)本该被释放的变量,无法及时释放,会存在闭包空间中,让这个变量可以更久远地使用。