关于ie事件多投内存泄漏的一种简单解法
转:越兔
关于ie事件多投内存泄漏的一种简单解法
额,这个问题大家应该经常碰到,但也通常都忽略(当然,我也忽略
不过还是提供一个简单的解决方案。
问题如下代码:
- 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来模拟的)等各种问题。在此就不多说了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论