如果 JS 未连接到 DOM 时,是否会使用事件侦听器删除双重创建的元素

Will JS remove dunamically created element with event listener if it's not connected to the DOM?

本文关键字:删除 侦听器 事件 重创 元素 创建 连接 JS DOM 是否 如果      更新时间:2023-09-26

让我们想象我们有这样的代码:

function someName(callback) {
  var elem = document.createElement('input');
  elem.addEventListener('change', function(evt) {
    callback();
  }, false);
  // some code
  elem.click();
}
// some code
someName(function() {
  alert("Hello world!");
});

问题是:JS在移出回调的上下文后,是否会完全删除在"someName"函数中创建的"elem"元素?另一个问题是:如果发出"click"事件后没有更改"elem"元素,JS会删除它吗?

你能解释一下什么时候删除"elem"元素吗?

PS:我正在尝试使用 node-webkit 编写一个简单的应用程序,需要这样的代码来让 node-webkit 打开文件对话框(打开文件、保存文件等)并处理它的结果。

函数内部定义的变量仅在执行函数时存在于函数内部。

你的代码创建一个输入元素,并将一个回调函数分配给它的状态更改处理程序,但你实际上并没有将元素附加/插入到任何地方的 DOM,所以该元素只作为该变量存在;在函数结束后,它永远不会成为 DOM 中存在的东西

因此,当函数结束时,变量将被销毁,该元素将不再存在,包括状态更改处理程序。

旁注:它.createElement()不是.create()(除非你有定义.create()方法的代码......