javascript - 如果没有连接到 DOM,JS 会删除带有事件监听器的动态创建的元素吗?

标签 javascript events dom garbage-collection node-webkit

假设我们有这样的代码:

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”元素吗?另一个问题是:如果“elem”元素在发出“click”事件后没有改变,JS会删除它吗?

请您解释一下何时删除“elem”元素?

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

最佳答案

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

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

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

旁注:它是 .createElement() 而不是 .create() (除非您有定义 .create( )方法..)

关于javascript - 如果没有连接到 DOM,JS 会删除带有事件监听器的动态创建的元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19877028/

相关文章:

c# - 检测 Webbrowser 是否重定向

javascript - 从 JSON 读取二维数组

javascript - 如何区分jquery上使用codeigniter从mysql获取数据的两个数组

typescript - Aurelia 自定义元素从函数内冒泡/委托(delegate)?

events - 事件触发时 CDI 观察器尚未初始化

debugging - 如何检查React Native应用的DOM树?

javascript - Firefox 偶尔不会加载动态 iframe

java - 如何发出和处理自定义事件?

javascript - 在 optgroup 中获取选择选项值以显示额外内容

javascript - 带有 ID 的 DOM 树元素会成为全局属性吗?