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

发布于 2022-10-15 04:22:51 字数 1769 浏览 17 评论 0

转:越兔

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

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

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

问题如下代码:

  1. var bind = function (el, F) {
  2.     el.attachEvent('click', function () {
  3.         F(el);
  4.     });
  5. };

复制代码匿名函数[[scope]]有到el的循环引用
经过测试,利用scope chain的查找特性可以解决此问题。
代码如下:

  1. var bind = function (el, F) {
  2.     void function () {
  3.         var closure = function () {
  4.             F(el);
  5.         };
  6.         el.attachEvent('click', closure);
  7.     }();
  8. };

复制代码稍微改一下:

  1. var bind = function (el, type, handler) {
  2.     return function () {
  3.         var closure = function () {
  4.             return handler.apply(el, arguments);
  5.         };
  6.         return el.attachEvent(type, closure);
  7.     }();
  8. };

复制代码当然,实际中的事件多投要比这个复杂的多,要考虑扩展事件代理(如mouseenter实际是代理mouseover来模拟的)等各种问题。在此就不多说了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文