为了账号安全,请及时绑定邮箱和手机立即绑定

以下执行的js代码中,代码执行完毕,变量得到释放了吗?

以下执行的js代码中,代码执行完毕,变量得到释放了吗?

慕姐8265434 2019-04-06 23:15:18
小弟也是初学JS,请教一下各位大牛!代码片段:(function() {    var li = document.getElementById('nav').getElementsByTagName('li'),        i = 0;    for (; i < li.length; i++) {        li[i].index = i;        li[i].onmouseover = function() {            for (var j = 0; j < li.length; j++) {                li[j].getElementsByTagName('a')[0].className = '';            }            li[this.index].getElementsByTagName('a')[0].className = 'current';        }    }}());我就是想问下这里的 li 变量,当函数执行完成时,有没有得到内存的释放?我个人认为觉得并没有得到释放,因为 onmouseouver 事件,闭包引用了 li 外面作用域的变量,所以垃圾回收器,标记一直是1,所以没有得到释放。如果要想释放内存,以上代码应该怎样改呢?
查看完整描述

4 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

这里的 li 变量,当函数执行完成时,有没有得到内存的释放?

没有

这个算内存泄露吗?
不算,当你不再需要的内存,它已经没有被引用了,但却没释放,这意味着除非程序结束,不然它永远没法释放了,这叫内存泄露。

li变量不释放有什么问题
没什么问题


查看完整回答
反对 回复 2019-04-11
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

除了IE的部分对象(BOM,DOM)采用引用计数的方式以外,其它浏览器都完全采用标记清除方式来进行垃圾收集。

不使用匿名函数。改用一个实例对象保存指向li的指针,通过该对象引用li,最后用delete操作符或者赋值为null来解除对li的引用。


查看完整回答
反对 回复 2019-04-11
  • 4 回答
  • 0 关注
  • 978 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信