改变innerHTML关联导致内存无法释放

开发 前端
本文描述了一个DOM操作中很基础的问题:改变已经删除结点的innerHTML关联,会导致内存无法释放的问题。

使用JavaScript进行DOM操作的时候,视浏览器的情况,总会遇到些有趣的事情。这次描述的问题和IE6和innerHTML关联有关:细节记录, ie6 对已删除结点的innerHTML以及dom操作时会出现该删除节点的内存再也释放不掉,而设置删除节点的属性以及 css 则没有问题。

经常在 xhr 中回调处理结点的注意了,可能要处理的结点已经删除了。

测试代码:

  1. < div id="p"> 
  2.  < a id="c"> 
  3.   xx  
  4.  < /a> 
  5. < /div> 
  6.  
  7.  
  8. < script> 
  9.  window.onload=function(){  
  10.     
  11.   var a=document.getElementById("c");  
  12.   document.getElementById("p").innerHTML="";  
  13.     
  14.   //css,属性没有问题  
  15.   //a.style.width="1px";  
  16.   //a.href="xx";  
  17.     
  18.   //设置innerHTML就有问题了:改变了innerHTML关联  
  19.   a.innerHTML='yy';  
  20.     
  21.   //dom a 和 span 都无法释放了  
  22.   //a.appendChild(document.createElement("span"));  
  23.     
  24.   //a=null;  
  25.    
  26.  }  
  27.  < /script> 
  28.    

正常情况下:

页面执行后 in-use 结点 6 个 ,a 已经释放了

正常情况 

innerHTML关联:

改变了已删除结点的innerHTML in-use 结点 7 个 ,a 无法释放

innerHTMl关联 

【编辑推荐】

  1. 详解Javascript中的Array扩展
  2. JSON是什么?为JavaScript准备的数据格式
  3. 十个最常用的JavaScript自定义函数
  4. 有关JavaScript事件加载的一些延伸思考
  5. JavaScript使用心得汇总:从BOM和DOM谈起
责任编辑:yangsai 来源: JavaEye博客
相关推荐

2013-06-04 14:21:20

Vector内存释放

2012-09-13 15:37:21

linux内存

2009-06-10 22:03:40

JavaScript内IE内存泄漏

2023-10-18 13:31:00

Linux内存

2010-01-12 11:52:40

2023-04-27 14:39:57

腾讯C++后端

2010-08-26 09:51:56

级联端口

2010-03-31 10:07:09

Oracle shar

2010-03-05 13:59:16

Linux服务器内存

2022-10-18 08:38:16

内存泄漏线程

2021-08-10 09:58:59

ThreadLocal内存泄漏

2011-07-25 17:48:10

iPhone 内存

2010-07-29 14:08:05

Flex内存泄露

2009-01-08 09:53:00

2022-10-30 13:21:58

谷歌Chrome浏览器

2022-03-07 10:54:34

内存Linux

2011-07-22 15:42:39

Objective-C UIView 内存

2010-03-22 09:17:15

Office 97Windows 7UAC

2017-02-10 11:00:59

Windows服务器filebeat

2009-01-16 09:06:00

点赞
收藏

51CTO技术栈公众号