请教一个JS的问题,多谢回复!谢谢~
发布于 10 年前 作者 leolovenodejs 3966 次浏览 最后一次编辑是 6 年前

麻烦请问,这样写会导致内存泄露吗?多谢回复! for examle:

var Pro = {
    doc : document,
    getLeftArrowEvent : function(){
	    //引入this,即整个对象为方便以后可能的引用
	    var is = this,
		    doc = is.doc,
		    leftArrow = doc.getElementById('leftArrow');
	    leftArrow.onmouseover = function(){
		    var th = is,
			    doc = th.doc,
			    leftArrow = doc.getElementById('leftArrow');
		    leftArrow.style.cursor = 'pointer';
	    };
	    leftArrow.onmouseout = function(){
		    var th = is,
			    doc = th.doc,
			    leftArrow = doc.getElementById('leftArrow');
		    leftArrow.style.cursor = '';
	    };
	    leftArrow = null;
    }
};
1 回复

觉得不会,不存在循环计数 Pro域下的doc,在getLeftArrowEvent使用一次计数+1,执行结束后,doc计数会减一因此最终会被回收。 同样我们看getLeftArrowEvent下的is和doc这些在本函数中都是使用了一次,都会被正常回收。leftArrow被使用了两次,但是在执行完 leftArrow.onmouseover 计数减一,继续执行完leftArrow.onmouseout再减一。同样看onmouseover 、onmouseout这两个函数中也并不存在循环调用的问题,只是有一个问题,因为大部分都是相同命名,是局部变量和全局变量混淆的问题,很容易让大家误解会存在内存泄漏吧。 个人觉得,如有问题,希望大家一起交流!

回到顶部