Javascript闭包引起IE内存泄露分析_第1页
Javascript闭包引起IE内存泄露分析_第2页
Javascript闭包引起IE内存泄露分析_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Javascript闭包引起IE内存泄露分析Javascript闭包引起IE内存泄露分析Javascript闭包引起IE内存泄露分析复制代码代码如下:functionfors() obj_a=obj_b;obj_b. attr=obj_a;复制代码代码如下:functionfors() obj_b=;obj_b. attr=obj_b;上面是两个个很显示的循环引用,IE中产生了内存泄露,由于IE的内存回收机制,导至会长期占用内存而不能释放。但闭包的内存泄露,有些隐蔽。因为闭包的'循环引用,是间接的。复制代码代码如下:functioniememery()var js_obj=docume

2、nt. createElement (z,divzz);js_obj. oncontextmenu=function()returnfalse;从表面上看,没有任何循环引用。但上面是一个闭包,根据闭包 的特性,内部函数有权访问外部函数的变量对象。所以当 iememery ()执行之后:js_obj是一个DOM元素的引用,DOM元素它长期在网页当中,不 会消失,而这个DOM元素的一属性oncontextmenu,又是内部的函 数引用(闭包),而这个匿名函数又和js_obj之间有隐藏的关联 (作用域链)所以形成了一个,循环引用.即:js_obj. oncontextmenu间接引用到js_obj也

3、就是说,这个对象 的一个属性,又间接的引用了自己。只要有循环引用,就会在IE下产生内存泄露。打开你的windows 任务管理器,在IE中不停刷新含有这个代码的html页面,看看 Iexploer进程的内存占用情况,一直上升,且不会自动回收(降 低);解决办法:复制代码代码如下:functioniememery()var js_obj=document. createElement (,zdiv,z);js_obj. oncontextmenu二function()returnfalse;js_obj.one ontextmenu=null; /加上这句,断开引用当IE中发生js对象与dom对象直接的循环引用,并且之后没有 引用指向他们,如果是IE6,内存泄漏,直到关闭IE进程为止如果是IE7,内存泄漏,直到离开当前页面为止如果是IE8, GC回收器回收他们的内存,无论当前是不是 c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论