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

以下执行的js代码中,代码执行完毕,变量得到释放了吗?
小弟也是初学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,所以没有得到释放。

如果要想释放内存,以上代码应该怎样改呢?
------解决方案--------------------
闭包里面的变量使用完毕后会被清除的 
以次执行的js代码中,代码执行完毕,变量得到释放了吗
以次执行的js代码中,代码执行完毕,变量得到释放了吗
------解决方案--------------------
你事件要触发,你释放了就出错了

(function() {
    var li = document.getElementById('nav').getElementsByTagName('li'),
        i = 0;
    for (; i < li.length; i++) {
        li[i].index = i;
        li[i].onmouseover = function() {
           var li = document.getElementById('nav').getElementsByTagName('li');///重新获取
            for (var j = 0; j < li.length; j++) {
                li[j].getElementsByTagName('a')[0].className = '';
            }
            li[this.index].getElementsByTagName('a')[0].className = 'current';
        }
    }
   delete li;li=null;//释放原来的
}());

------解决方案--------------------
只要那函数不再,变量就释放。
li[i].onmouseover = '';
------解决方案--------------------
li的属性保存了函数引用,函数闭包保存了li引用,循环引用下li是不会释放的
一般情况下我们是不用考虑这个的,但既然你想知道,就示例一种可以释放资源的方式吧:

(function() {
    var li = document.getElementById('nav').getElementsByTagName('li'),
        i = 0;
    for (; i < li.length; i++) {
        li[i].index = i;
        li[i].onmouseover = ev(li);
    }
}());
 function ev(li) {
    return function(){
            for (var j = 0; j < li.length; j++) {
                li[j].getElementsByTagName('a')[0].className = '';
            }
            li[this.index].getElementsByTagName('a')[0].className = 'current';
    }
}
这儿事件绑定处不存在闭包了,外部li变量可以得到释放
------解决方案--------------------
(function() {
    var liTags = document.getElementById('nav').getElementsByTagName('li'),
        i = 0;
    for (; i < liTags.length; i++) {
        
        liTags[i].onmouseover = function(e) {

var event = e 
------解决方案--------------------
 window.event;
// current li
var target = event.target 
------解决方案--------------------
 event.srcElement;

// parent node(nav)
var navTag = target.parentNode;
var linkTags = navTag.getElementsByTagName("a");
            for (var i = 0; j < linkTags.length; i++) {
                linkTags[i].className = '';
            }