JS内存泄漏

JS内存泄漏

1.意外的全局变量

全局变量的生命周期很长,直到页面关闭,它都存活,所以全局变量上的内存一直都不会被回收
当全局变量使用不当,没有及时回收(手动赋值null),或者拼写错误等将某个变量挂载到全局变量时,也就发生了内存泄漏

2.遗忘的定时器 和 事件监听

在组件内部挂载了定时器事件(setTimeout,window.addEventListener() ,如果在组件销毁时没有主动清除,这个函数内部引用的变量或函数都不会被垃圾回收机制回收,如果回调函数内部引用的变量或函数都不会被垃圾回收机制回收,如果引用变量存储了大量的数据,就白白占用了内存,造成大量内存泄漏

3.遗漏的DOM元素

DOM元素的生命周期正常是取决于是否挂载在DOM树上,当从DOM树上移除时,也就可以被销毁回收了
但是如果某个DOM元素,在js中也持有它的引用时,那么它的生命周期就是由js和是否在DOM树上两者决定了,记得移除时,两个地方都需要去清理才能正常回收

4.错误使用闭包

函数本身会持有它定义时所在的词法环境,但是通常情况下,使用完函数后,该函数所申请的内存都会被回收了,但是当一个函数内在返回一个函数的时候,由于函数内部持有外部函数的词法环境,而返回的函数又被其他生命周期的东西所持有,导致外部函数虽然执行完了,但内存无法被回收

所以,返回的函数,它的生命周期不宜过长,方便该闭包能够及时被回收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值