js 闭包内存泄露案例
时间: 2023-10-20 17:21:57 浏览: 85
Javascript内存泄露
闭包内存泄露通常发生在一个函数内部创建了一个闭包,并且该闭包引用了函数内部的变量,导致函数执行完毕后,闭包仍然占用着变量所在的内存空间,从而无法被垃圾回收机制回收,造成内存泄露。
以下是一个闭包内存泄露的案例:
```
function createClosure() {
var arr = new Array(10000).fill('a'); // 创建一个占用大量内存的数组
return function() {
console.log(arr.length);
}
}
var closure = createClosure(); // 创建闭包
closure(); // 执行闭包,输出 10000
// 此时 closure 引用了 createClosure 函数内部的 arr 变量
// 如果不手动释放 closure,arr 变量所占用的内存将无法被回收
```
在这个例子中,createClosure 函数返回一个闭包,该闭包引用了 createClosure 函数内部的 arr 变量,导致 arr 变量所占用的内存无法被垃圾回收机制回收,从而造成内存泄露。
要避免闭包内存泄露,可以在使用完闭包后手动将其设置为 null,从而释放闭包所引用的内存空间。例如:
```
function createClosure() {
var arr = new Array(10000).fill('a'); // 创建一个占用大量内存的数组
return function() {
console.log(arr.length);
}
}
var closure = createClosure(); // 创建闭包
closure(); // 执行闭包,输出 10000
closure = null; // 手动将闭包设置为 null,释放其引用的内存空间
```
阅读全文