为什么会引起循环引用和全局污染
文中说的把data直接放在元素对象上会引起虚幻引用和全局污染,这个不太好理解,请哪位大神帮忙举个例子解释一下?谢谢!
文中说的把data直接放在元素对象上会引起虚幻引用和全局污染,这个不太好理解,请哪位大神帮忙举个例子解释一下?谢谢!
2015-06-25
我理解的是,整个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采用的是引用计数的垃圾回收机制,因此这种情况下会导致其占用的内存无法回收,造成内存泄漏.
举报