未插入时DOM元素会发生什么?

时间:2018-01-24 13:48:33

标签: javascript

我目前正在使用代码下载从HTML内容生成的Excel工作表。 下载的行是:

var a = document.createElement('a');
a.href = tipoArquivo + ', ' + encodeURIComponent(formatoExcel);
a.download = nomeArquivo;
a.click();

我想知道这个a元素在没有插入到DOM树中时会发生什么,如果有必要销毁它插入和删除,或者在未插入时自动销毁它。

4 个答案:

答案 0 :(得分:2)

假设您的a变量超出范围,该对象不再被任何引用,并将在适当时候进行垃圾收集。要做到这一点,你无需做任何事情。

如果a不会及时超出范围(可能还有其它东西关闭),您可以清除它以在完成时释放参考:

a = null;

但这是唯一必要的,如果a会比你想要的元素更长久地坚持下去。

答案 1 :(得分:1)

它将保留在内存中,直到垃圾收集机制启动

答案 2 :(得分:1)

如果没有从代码中引用它,它将被自动销毁。

以下是关于javascript中Memory Management的文章

答案 3 :(得分:1)

<?php if (session_id() == "") { session_start(); } if (!isset($_SESSION['username'])) { $accessdenied_page = ''; header('Location: '.$accessdenied_page); exit; } $dbservername = 'localhost'; $dbusername = '******'; $dbpassword = '******'; $dbname = '******'; $dbtable = '******'; $success_page = '/page5.php'; $wusername = $_SESSION['username']; $conn = new mysqli($dbservername, $dbusername, $dbpassword, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT `Credit` FROM `".$dbtable."` WHERE `username` = '$wusername'"; $result = $conn->query($sql); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { if ($row['Credit'] < 5) { echo "Your Credit is not Enough , Please Buy a Credit"; } else { $sql2 = "UPDATE `".$dbtable."` SET `Credit` = `Credit` - 5 WHERE `username` = '$wusername' AND `Credit` >= 5"; $conn->query($sql2); } } } else { echo "0 results"; } $conn->close(); header('Location: '.$success_page); exit; ?> 方法创建一个可以插入DOM树的JS对象(element)。

与JS中创建的任何其他对象一样,元素对象的生命周期将由指向它的引用决定。如果元素没有插入到DOM中(因此没有被DOM机制引用),它很快就会被JS垃圾收集过程破坏。

有关详细信息,请参阅memory management