日期:2014-05-16  浏览次数:20281 次

请教高手一个javascript的基础问题
犀牛书上说,下面的代码在IE中有内存泄露的问题,因为是循环引用造成的:
function   addValidationHandler(form)   {
        form.attachEvent( "onsubmit ",   function(   )   {   return   validate(   );   });
}
但随后的解释的并不是很详细(也许是我没读明白),请大家给小弟讲讲吧,比如画个作用域链或对象间的引用示意图啥的...
谢谢。


------解决方案--------------------
我理解:
function( ) { return validate( ); }
是一个嵌套函数,被定义在函数addValidationHandler中,因为它被attachEvent到了form上,作为form提交事件的处理方法,则需要保留这个函数的运行环境----也就是说addValidationHandler函数的运行现场需要被保留,以备function( ) { return validate( ); }使用.
这样一来,form的onsubmit需要函数function( ) { return validate( ); },而这个函数需要addValidationHandler,addValidationHandler又有对form的引用,所以形成循环引用,内存无法释放,导致memery leak.