setTimeout——内存泄漏

写了个定时器,突发奇想,将setTimeout(function,n)放至function 函数内(function函数外已经用setTimeout调用了function函数)。

		function dd() {
		
			/*此处省略*/
            Mycheck=setTimeout(dd,n);
           //、、
            setTimeout(dd,n)
        }
        div1.onmouseover=function () {
            clearTimeout(Mycheck);
        };
        div1.onmouseout=function () {
            Mycheck=setTmoveeout(dd,n);
        }

执行一看,嘿~~~效果还不错没故障目光转向右下角顿时傻眼(⊙o⊙)~
加速球数值飙升啊~

我那个去,心中万匹草泥马飞过…直到浏览器页面如下图所示
这里写图片描述

,这丫都内存泄漏了~
查看如图
head
这丫上了一个阶梯后就不下来了,霸占着内存,居高临下

这锯齿形图案完美装饰着俺的浏览器~
内存泄漏

setTimeout本身只执行函数一次,由于在setTimeout需要调用的函数内部引用了这个setTimeout,引用没被清除,内存一直占用来不及回收,此时分配给页面的内存告急,你丫只给我这么一点内存还不腾出个地儿来让我喘口气?——

使用setTimeout一般不会出现内存泄漏的现象(使用规范),但是如果和其他函数在一起,形成了闭包就难逃内存泄漏了。

---------------------------------------分割线----------------------------

时隔几个月再看这篇博客的时候发现了比较严重的问题:

  1. 问题描述不清楚,可以说明的例子太少。(俺自己看着一脸懵×)
  2. 没深入研究

再次看这篇博文感觉需要总结几点:(当时啥代码也忘了)
1.可能会出现内存泄露的情况有:1)循环引用,内存没释放。
比如:
这里写图片描述
DOM 元素通过触发onclick直接引用匿名function,并且这个function引用了elem元素通过外部的词法环境,引用并没有释放。这小size的引用或许不会造成什么影响也不会显示出来(IE低版本可能需要清除),如果在点击触发的匿名函数里是一大串操作数据显示的代码,比如图表,在反复切换点击时泄露就会很明显了。上一次点击载入的一些变量和引用没有得到释放。这时可以使点击为null。document.οnclick=null;

2.没有清除定时器。

如何查看内存泄露呢。
1。如果泄露得很明显,那一眼就看出来了,比如浏览器崩溃、CPU飙升(可以看360加速球)。
2。控置台的performance查看,如果cpu一栏蓝色的线是锯齿、或者梯形等波动起伏大的形状,就要看看代码哪里有明显的问题了。

关注公众号回复“资料”即可获得为您精心准备的前端视频学习资料
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值