javascript – 为什么jQuery的.data()函数更好地防止内存泄漏?

前端之家收集整理的这篇文章主要介绍了javascript – 为什么jQuery的.data()函数更好地防止内存泄漏?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
关于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.

猜你在找的jQuery相关文章