在JavaScript中,当创建一个元素,然后删除包含的变量时,该元素是否保留在DOM中?

在JavaScript中,当创建一个元素,然后删除包含的变量时,该元素是否保留在DOM中?,javascript,dom,elements,Javascript,Dom,Elements,我有一个脚本,可以从XML文件异步加载imagesrc。 源随后被分配到div的background,并且background每5秒更改一次。 它运行良好,但我想预加载实际图像以显示已加载的图像。 我通过迭代一个数组,为每个源创建一个img: for(var i=0; i < clientLogos.lenght; i++){ var imgHolder = document.createElements("IMG"); imgHolder.src = clientLogo

我有一个脚本,可以从XML文件异步加载image
src
。 源随后被分配到
div
background
,并且
background
每5秒更改一次。 它运行良好,但我想预加载实际图像以显示已加载的图像。 我通过迭代一个数组,为每个源创建一个
img

for(var i=0; i < clientLogos.lenght; i++){
    var imgHolder = document.createElements("IMG");
    imgHolder.src = clientLogos[i];
}
for(变量i=0;i
如果在开发阶段预装了,很难分辨出区别,所以我的问题是: 如果我删除或重写了包含我刚刚创建的元素的变量,那么该元素是保留在DOM中,还是也被删除

我很确定它会一直存在,但我想问问更有经验的开发人员

我被它弄糊涂了:
document.createElement()
是否将其插入DOM?

是。新创建的元素将保留在DOM中,除非您显式删除它或覆盖某个父节点的
.innerHTML
属性


删除(“nulling”)
imgHolder
时,您仅删除对该节点的引用。

它将丢失。访问该元素的唯一方法是将其分配给某个新变量,并删除保存其值的DOM变量。

在给定示例中,当元素的引用计数降至0时,元素将被释放。在写入该变量之前,必须执行
appendChild
或类似操作以防止其发生

var imgHolder;
imgHolder = document.createElement("IMG");  // creates and references new Image
imgHolder.src = 'hello.jpg';                // some manip
/* have to save object here by means of inserting into DOM or merely pushing into array */
/* failure to do so tells JS's garbage collector what old object no longer needed */
imgHolder = document.createElement("IMG");  // deletes old image referenced by variable, creates and refs new one

如果创建的元素没有插入到任何其他元素中怎么办?它将驻留在DOM中的什么地方?@Dean:那么它就永远不会成为文档的一部分,因此也就永远不会出现在DOM中。(从技术上讲,它本身就是一个独立的文档,一旦无法访问它就会被删除。)@Dean:嗯,如果你从未调用
appendChild()
例如插入(追加)创建节点的某个位置,然后覆盖它,它就消失了。将其视为用于创建新DOM节点的模板。成功地将其插入DOM后,您可以使用
imgHolder
中的引用hold访问该节点。对不起,我指的是在文档内部创建的,如:document.createElement(“标记”)。在DOM里哪里可以看到它?@Dean:哪里也看不到。您需要调用像
.appendChild
.insertBefore
等方法,才能将“内存”ish对象放入DOM中。@user205376:那么循环呢<在我的示例中,code>imgHolder
是一个数组。嗯,在您的示例中,imgHolder是对象(确切地说是HTMLElement),您在每次迭代中都会覆盖它。执行someArray.push(imgHolder)来保存哦,我明白了,很抱歉我在脚本之间混淆了,我还有一个非常类似的脚本。谢谢