我目前正在使用代码下载从HTML内容生成的Excel工作表。 下载的行是:
var a = document.createElement('a');
a.href = tipoArquivo + ', ' + encodeURIComponent(formatoExcel);
a.download = nomeArquivo;
a.click();
我想知道这个a
元素在没有插入到DOM树中时会发生什么,如果有必要销毁它插入和删除,或者在未插入时自动销毁它。
答案 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。