请教高手一个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.