jQuery如何使用.data()存储数据?

TK.*_*TK. 16 javascript jquery

我有点困惑jQuery如何使用.data()函数存储数据.

这是什么名为expando?或者这是使用HTML5 Web Storage,虽然我认为这不太可能?

文件说:

.data()方法允许我们以一种不受循环引用安全的方式将任何类型的数据附加到DOM元素,从而避免内存泄漏.

当我读到有关expando的消息时,它似乎存在内存泄漏的风险.不幸的是,我的技能还不足以阅读和理解jQuery代码本身,但我想知道jQuery如何通过使用来存储这些数据data().

jit*_*ter 18

基本上,jQuery保存您存储/检索的信息,data(name, value)/data(name)removeData(name)在名为的内部javascript对象中删除cache.其余的只是一些javascript魔术,使其工作,并保持所有的关联正确.

哦,回答你问题的第一部分.它既不是expando也不是HTML5 WebStorage.

为了纠正自己,我认为jQuery确实在一次使用expando.它为您用于data()存储信息的元素设置了一个属性.属性名称如下所示

"jQuery" + now() //e.g. jQuery1268647073375
Run Code Online (Sandbox Code Playgroud)

顺便说一句.now()是一个返回的内部函数(new Date).getTime()

并且该值是UUID由jQuery生成的.

这样jQuery以后就可以从它的内部缓存中检索正确的关联数据.

因此,如果你担心IE中的expando,我记得你无法删除它们,那么泄漏应该是最小的,因为jQuery每个元素只使用1个expando存储数据.除非你data()真的要求1000个元素,否则我看不到内存问题