为什么会引起循环引用和全局污染

来源:4-4 jQuery缓存的设计思路

舞阳冢虎

2015-06-25 10:30

文中说的把data直接放在元素对象上会引起虚幻引用和全局污染,这个不太好理解,请哪位大神帮忙举个例子解释一下?谢谢!

写回答 关注

2回答

  • ST_Lighter
    2016-05-31 14:06:28

    我理解的是,整个dom也属于全局,多个js代码对同一dom节点添加/修改数据可能会互相影响,也就是污染了dom元素这一个全局变量.

    循环引用,这里用事件对象的回调函数为例子(取自《javascript高级程序设计》第三版 7.2.3):

    function assignHandler() {
      var ele = document.getElementById('someEle');
      ele.onclick = function() {
        alert(ele.id);
      }
    }

    这里ele.onclick引用了匿名函数,匿名函数又引用了ele(这里匿名函数实际引用assignHandler的活动对象,assignHandler的活动对象引用ele).因此,这里ele的引用数至少为1.

    在IE9之前,由于dom采用的是引用计数的垃圾回收机制,因此这种情况下会导致其占用的内存无法回收,造成内存泄漏.

  • luckyforever
    2016-03-16 21:16:21

    冒泡?

jQuery源码解析(架构与依赖模块)

由浅入深地剖析jQuery库的设计与实现,揭开框架背后的秘密

84049 学习 · 280 问题

查看课程

相似问题