目录
什么是内存泄漏
在计算机科学中,内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费。
通俗点就是:内存泄漏就是一些可以避免的内存花销。
常见的内存泄漏问题
闭包会引起内存泄漏?
不一定,闭包是否产生内存浪费取决于 js 的垃圾回收机制是否将变量占用的内存给及时清除掉,常见的垃圾回收算法有标记清除法,能标记到就不回收,反之则回收。
-
不会造成内存浪费的情况
一般如果闭包函数没有返回值或者没有使用全局变量对闭包函数的返回值进行存储,如下
function fn() {
//fn 函数作用域的局部变量 arr
const arr = new Array(10000000)
function fn1() {
// 在 fn1 函数作用域下访问(依赖)外层 fn 函数作用域的局部变量 arr,此时会产生闭包
console.log(arr[0]);
}
fn1()
}
fn()
打开控制台进行断点查看:
打开控制台进行性能分析:
函数在执行时一开始由于创建了new Array(10000000),所以占据了堆中大概40mb内存,也就是一个Array(10000000)的大小,不过在很快