问一个很弱的问题,获取DOM元素后,不再使用时需要显性置为null吗?比方  var el = document.getElementById('xxx');这个 el 在不使用后,需要马上给它设置成 null 吗,还是等待自动回收。另外,js对这种对象是在什么时候自动回收的。。
请指教~

解决方案 »

  1.   

    局部变量 自己就可以回收了(如果没有被其他函数里面引用,就是闭包那种,那种变量GC不回收)GC的回收机制是 隔一段时间回收不用的局部变量咯  (多长时间我也不知道 )
    因为是单线程  所以可能会给当前正在运行的程序带来点延迟
    你的问题是什么时候回收   其实一直在回收   具体是什么时间,我不知道啊
    如果设置成null了 其实这个变量还是存在啊  那个变量的值是null
    只是这样就断开了于变量与dom的关联     听说是因为ie6的循环引用才需要断开
    所以我认为把变量设置成了null  还是要等GC 才能真正的从内存中删除以上都是个人见解......一篇文章

    http://www.cnblogs.com/hyddd/archive/2013/02/07/2908598.html

      

  2.   

    无需,赋值为null也无用,当dom加入到页面中,就是页面对象的成员,会一直生存,在从页面中移除前,资源是无法被释放的.
    仅仅把所谓的"变量"释放是无意义的,变量引用的资源才是根本,某些情况下把变量赋值为null是为了快速回收资源(在对象没有被还在生存的变量引用时,对象占用的资源会自动回收),当即使赋值为null也无法释放资源时,赋值为null是无意义的
      

  3.   

    我没说没必要 你别误会啊看看这篇文章啊 大哥http://blog.csdn.net/dead_of_winter/article/details/2277673
      

  4.   

    问题1:ie9之前的话 ,可以使用(如果对象很多的话,鼓励使用),因为ie9之前的 dom,bom 都是采用引用计数的策略来垃圾收集的。
    所谓引用技术:跟踪记录每个值被引用的次数。当声明一个变量并讲一个引用类型的值复制给他时,这个指的引用次数就+1.如果同一个值又被赋值给其他的变量,这+1。反之,如果如果包含对这个值引用的变量得到了另外一个值,那么引用计数-1.
    当引用计数是0的时候 ,就说明没有引用这个值的变量了,那么垃圾回收的时候 就可以释放他的内存。
    对于普通的变量  没有必要回收。
    问题2:ie7之前的gc时间是根据内存分配量运行的。具体是 256个变量,4096个对象字面量或者数组或者64kb的字符串。如果达到其中任何一个指标 ,这gc就运行一次。
    ie7后做了修正:临界值改成动态的了。初始值与ie6一样。如果gc回收的内存分配量地域15%,则上述的指标的临界值就会加倍。如果回收了85%的内存分配量,则将各种临界值重置会默认值