欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > 存储管理JS垃圾回收机制和JS中的闭包

存储管理JS垃圾回收机制和JS中的闭包

2025/9/18 8:36:58 来源:https://blog.csdn.net/qq_56798493/article/details/144320467  浏览:    关键词:存储管理JS垃圾回收机制和JS中的闭包

 认识内存管理

js的内存管理

js的垃圾回收机制

GC算法-引用计数

循环引用会导致内存泄漏

 每个空间都由retain count用来计数当前空间被引用次数,当引用次数为0时,就会进行回收

GC算法-标记清楚

高阶函数

额外小知识

函数可以作为参数和返回值

函数中可以嵌套函数

函数和方法的区别

find方法,查找方法,参数一个,为数组值,如果找到了指定的值则返回该值,反之返回undefined,如果找的是数组的值是对象的某个属性,则找到后返回的是对应的对象

findeIndex为找索引值,返回索引值 

filter过滤函数,三个参数,第一个item为数组的值,第二个index,为下标,第三个为该数组。可以只写一个参数,返回值为布尔值。为false时则代表不会放到当前数组中,true会
map映射方法,一个参数,为数组的值,返回值
forEach迭代,item为数组值,无返回值
reduce,累加方法,参数有两个一个是函数,该参数函数的参数preValue为上一次返回值,item为当前的值,另一个参数为initial为初始值
 

 JS中的闭包的定义

闭包访问过程

闭包的执行过程

闭包内存泄漏

现将foo函数和fn变量放入GO对象,foo为函数会创建foo函数对象,里面包含父级作用域和执行代码块。然后在调用栈中生成全局执行上下文GEC,里面的VO存放GO,开始执行代码,执行对fn正式赋值,发现值是函数foo,则调用函数,生成foo的AO对象,将函数中的name和bar函数放入其中,bar为函数。所以生成此bar函数对象,其中放父级作用域,foo,和执行代码内容。然后在ECStack中出现FEC函数执行上下文,其中的AO放入VO中。然后运行代码,运行完后,bar的函数执行上下文销毁,但bar函数对象不会销毁。

bar不会被销毁,返回给了fn,bar对象不销毁,所以父级foo的ao也不销毁,因为bar指向了,执行完bar,bar的函数上下文就会被销毁,那么bar的ao对象也会被销毁,但是foo的ao对象就一直不会被销毁。但是对于bar和foo只需要使用一次,但是却一直不回收,所以这就是内存泄漏,想要解决这个问题将fu为null,这样ao对象和bar函数对象就只有两个互指为循环引用,就会被回收。如果想foo函数对象也被回收,就将foo=null即可

先对全局对象进行解析,然后在对foo解析,然后会创建foo函数对象,里面存放父级go,以及函数执行体,然后再解析test函数,同样生成test函数对象,里面存放父级ao,以及函数执行体,然后代码开始运行,会先给go的message进行赋值,然后再执行函数之前先创建foo的函数上下文,其中有vo,vo中有ao,创建ao放置foo函数的变量,然后运行函数内容。执行完之后会销毁该上下文

小的数组占4个字节,大的数组占8个字节

闭包的内存泄漏测试

AO不使用的属性

如果并没使用到foo函数的一些属性,那么没用到的属性就会销毁掉

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词