zoukankan      html  css  js  c++  java
  • Javascript学习笔记:闭包题解(3)

    代码:

    1 function assignHandler(){
    2     var element=document.getElementById('someElementId');
    3 
    4     element.onclick=function(){
    5         alert(element.id);
    6     }
    7 }

    问题:请问以上代码是否存在内存泄漏?

    正确答案:存在内存泄漏

    解析:由于上段代码中存在闭包,闭包会保存包含该闭包的函数的作用域链,因此element对象会一直存在于内存中,不会被垃圾回收机制回收掉。那么怎么解决闭包内存泄漏的问题呢?闭包内尽量引用包含函数的值类型变量,不引用包含函数的引用类型变量,且必须在包含函数的最后将引用变量的值设置为null,断开变量名与对象之间的连接,这样对象便可正常回收,解决内存泄漏问题。代码如下:

     1 function assignHandler(){
     2     var element=document.getElementById('someElementId');
     3     var id=element.id;
     4 
     5     element.onclick=function(){
     6         alert(id);
     7     }
     8 
     9     element=null;
    10 }
  • 相关阅读:
    NSBundle使用:获取文件路径
    安装git后遇到的问题及解决
    (转)iPhone 字体显示效果大全
    iPhone开发小技巧
    协议与委托简单实例讲解(转)
    Zoom Me FAQ
    Show Desktop Pro FAQ
    The Startup Manager FAQ
    Finder Quick Menu FAQ
    The App Locker FAQ
  • 原文地址:https://www.cnblogs.com/PolarisSky/p/5276049.html
Copyright © 2011-2022 走看看