闭包内存泄漏问题

由于闭包携带着包含它的函数的作用域,所以往往比普通函数占用更多的内存,但是闭包本身并不会造成内存泄漏,用法不当才会造成这个结果,所以使用闭包需谨慎。

造成内存泄漏的情况一般有以下两种:

1.在闭包的作用域链中引用了html元素未释放内存

由于本身html元素是不会被回收的,所以闭包中占用的内存也无法被回收,如:
function A(){
    var a = document.getElementById("aid");
    a.onclick = function(){
        //事件处理代码
    }
}
在这段代码中,函数A内存在一个匿名函数,由于这个匿名函数有着对a的引用,所以导致了a占用的内存会一直存在。
解决方法:
用完后把a变量设置为null,解除闭包对a的引用,这样就能确保内存正常回收了。
function A(){
    var a = document.getElementById("aid");
    a.onclick = function(){
        //事件处理代码
    }
    a = null;
}

2.出现了循环引用

闭包中的循环引用会导致内存永远都不能被释放,如果是A->B,A指向B,当A被释放之后,已经没有指针指向B了,这是B占用的内存也能被释放;
但是,如果是A->B, B->A,形成了循环之后,A,B占用的内存将一直存在。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值