javascript内存问题

javascript memory question

本文关键字:问题 内存 javascript      更新时间:2024-05-07

假设在我的webapp启动之前,我想首先创建所有dom元素,并将它们存储在一些预加载的数组中。类似于:

for (i = 1...100) { preLoader.push($('<div id="' + i + '" />')); }

然后,根据操作,我将从数组中获取正确的元素,并将其附加到DOM中。
现在我的问题是:如果我以后要做:

$(div#i).remove()

它还会影响我的preLoader数组吗?还是它与DOM中的引用不同?

它还会影响我的预加载器阵列吗

不,不会。对象将从内存中删除,仅当没有访问它的方法时,即没有对它的引用。在$('div#'+i).remove()之后,您不能从DOM访问它,但您仍然可以通过preLoader[i-1]访问它。因此,您需要从preLoader数组中显式删除对象:

preLoader.splice(i-1,1);

DOM中的对象是相同的。如果你想再次使用相同的标签,你应该调用

$(div#i).detach();

来自jquery文档:

除.destrict()保留所有与已移除元素相关联的jQuery数据外,.destrict)方法与.remove()方法相同。当移除的元素稍后要重新插入DOM时,此方法非常有用。

如果使用.remove(),将丢失与要删除的元素相关联的事件和数据。但是,即使使用remove(),您也可以通过再次调用.appendTo()来重用相同的元素。

小提琴手示例:http://jsfiddle.net/sKRCF/1(很抱歉,这是一个简单的方法)。