Javascript 事件处理程序垃圾收集

Javascript event handler Garbage collection

下面的代码会导致内存泄漏吗?当我从 DOM 中删除 'submitBtn' 时,它会与其事件处理程序一起被垃圾回收吗? 或者在从 DOM 中删除 'submitBtn' 之前是否必须调用 removeEventListener()?

function addEventHandler() {
  var btnId3 = document.getElementById("id3");
  btnId3.addEventListener(
    "click",
    function () {
      console.log(btnId3.name);
    },
    false
  );
}

addEventHandler();
document.forms[0].lastElementChild.remove();
<!DOCTYPE html>
<html>
<head>
  <title>JS GC</title>
</head>
<body>
  <form id="id1" method="post">
    <input id="id2" type="text" name="username" value="John">
    <input id="id3" type="button" name="submitBtn" value="Echo Username">
  </form>
</body>
</html>

当所有对它的引用都丢失时,每个值(包括函数和 DOM 对象)都可以进行垃圾回收。如果你删除一个 DOM 节点,它会从 DOM 树中分离出来,因此对它的引用也会被删除。只要没有其他引用(您的代码中没有),该节点就可以进行垃圾回收。因此该函数(如果它仅在节点内部被引用)对于 gc 也是可行的。