关于ie事件多投内存泄漏的一种简单解法
时间:2011-06-14 来源:越兔
额,这个问题大家应该经常碰到,但也通常都忽略(当然,我也忽略:D
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来模拟的)等各种问题。在此就不多说了。
不过还是提供一个简单的解决方案。
问题如下代码: 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来模拟的)等各种问题。在此就不多说了。
相关阅读 更多 +