关于jQuery实用程序函数jQuery.data(),在线文档说:
“The jQuery.data() method allows us to
attach data of any type to DOM
elements in a way that is safe from
circular references and therefore from
memory leaks. “
为什么使用:
document.body.foo = 52;
可以导致内存泄漏 – 或者在什么条件下 – 以便我应该使用
jQuery.data(document.body,'foo',52);
在任何情况下,我是否总是更喜欢.data()而不是使用expandos?
(如果你能提供一个比较差异的例子,我将不胜感激)
谢谢,
burak ozdogan
解决方法
更准确的原因是它在你给出的引用中所说的内容:“不受循环引用的影响.”
假设您有变量nodeOne和nodeTwo,它们引用节点.
比如说你把它放在一个函数中(你没有存储它的引用):
jQuery.data(nodeOne,'item',nodeTwo); jQuery.data(nodetwo,nodeOne);
在函数运行之后,有一个循环引用:nodeOne有一个对nodeTwo的引用,反之亦然.
通过使用jQuery.data,该循环引用不会阻止这两个变量被垃圾回收.
但是,如果您在不使用jQuery.data的情况下执行相同操作,则即使不再需要变量,也不会对nodeOne和nodeTwo变量进行垃圾回收.
–
Should I ALWAYS prefer .data() instead
of using expandos in any case?
除非您正在进行大量数据设置并且需要额外的性能下降(并且您可以通过使用性能分析来判断)并且确定您不会创建循环引用(或者至少是一个重要的数字),那么是的,你也可以只使用jQuery.data.