常见的js内存泄漏

常见的js内存泄漏

1.意外的全局变量。未被声明的变量,会被挂载在Window对象下,不能及时的销毁。

2.计时器和回调函数timers、定时器setInterval或者setTimeout在不需要使用的时候,没有被clear,导致定时器的回调函数及其内部依赖的变量都不能被回收,这就会造成内存泄漏。

3.DOM泄漏。

(1)给DOM对象添加的属性是一个对象的引用。解决方法:在Window.onload时间中加上document.getElementById(‘id’).diyProp=null

(2)元素引用没有清理。var a=document.getElementById(‘id’);document.body.removeChild(a);这种操作不能回收,因为存在变量a对它的引用。虽然我们用removeChild移除了,但是还在对象里保存着#的引用,即DOM元素还在内存里面。解决方法:a=null;

(3)事件的绑定没有移除。监听事件没有移除。

4.js闭包。闭包在IE6下会造成内存泄漏,但是现在已经无须考虑了。值得注意的是闭包本身不会造成内存泄漏,但闭包过多很容易导致内存泄漏。闭包会造成对象引用的生命周期脱离当前函数的上下文,如果闭包使用不当,可以导致环形引用,类似于死锁,只能避免,无法发生之后解决,即使有垃圾回收也还是会内存泄漏。

5.console日志记录,控制台日志记录对总体内存内置文件的影响,也是个重大的问题,同时也是容易被忽略的。记录错误的对象,可以将大量的数据保留在内存中。传递给console.log的对象不能被垃圾回收,所以没有去掉console.log可能会导致内存泄漏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值