首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

关于ie事件多投内存泄漏的一种简单解法

作者:  时间: 2011-06-14

额,这个问题大家应该经常碰到,但也通常都忽略(当然,我也忽略:D

 

不过还是提供一个简单的解决方案。 

 

问题如下代码:
var bind = function (el, F) {
    el.attachEvent(
'click'function () {
        F(el);
    });
};
匿名函数[[scope]]有到el的循环引用
经过测试,利用scope chain的查找特性可以解决此问题。
代码如下:
var bind = function (el, F) {
    
void function () {
        
var closure = function () {
            F(el);
        };
        el.attachEvent(
'click', closure);
    }();
};
稍微改一下:
var bind = function (el, type, handler) {
    
return function () {
        
var closure = function () {
            
return handler.apply(el, arguments);
        };
        
return el.attachEvent(type, closure);
    }();
};
当然,实际中的事件多投要比这个复杂的多,要考虑扩展事件代理(如mouseenter实际是代理mouseover来模拟的)等各种问题。在此就不多说了。