我將使用這個 HTML 和 JS DOM 腳本作為例子來解釋這個問題:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
</head>
<body>
<button id="my-button">Do Something</button>
<script type="text/javascript">
let setButtonFunc;
setButtonFunc = function() {
let button = document.getElementById("my-button");
let phrase = "Printing Something";
button.onclick = function() {
text = document.createTextNode(phrase);
document.body.append(text);
}
}
setButtonFunc();
setButtonFunc = null;
</script>
</body>
</html>
我在使用關鍵字setButtonFunc創建的變數中定義了一個函式。let此函式用于設定按鈕的onclick屬性,使其能夠在每次按下時將文本附加到頁面。
我的問題是:一旦變數設定為null,垃圾收集器會收集這些phrase變數嗎?buttonsetButtonFunc
從邏輯上講,他們所有的裁判都從那條線上消失了。一旦變數設定為null,只有按鈕的onclick函式應該保留在記憶體中。所有其他變數都應該由垃圾收集器收集,因為沒有其他參考可以使它們在范圍之外保持活動狀態。
但是,如果您一直按下按鈕,onclick函式將繼續正常執行,就好像phrase從未從記憶體中釋放一樣。
我似乎無法理解它。例如,在 python 中,如果我要執行相同的示例,有時垃圾收集器會破壞變數并引發例外。
為什么這里不會發生在 Javascript 中?匿名函式(在按鈕的onclick上使用)是否以某種方式保存了它們的參考?我是否遺漏了檔案中的某些內容?
uj5u.com熱心網友回復:
匿名函式(用于按鈕的 onclick)是否以某種方式保存了它們的參考?
這正是正在發生的事情,它被稱為提升
uj5u.com熱心網友回復:
按鈕變數應該被收集,但短語仍然在點擊事件處理程式中被參考,所以只要點擊處理程式還活著,它就會保持活動狀態
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/512814.html
上一篇:如何控制資料框中列的位置?
