Javascript JS是否会删除dunamically创建的带有事件侦听器的元素,如果它是';它没有连接到DOM吗?

Javascript JS是否会删除dunamically创建的带有事件侦听器的元素,如果它是';它没有连接到DOM吗?,javascript,events,dom,garbage-collection,node-webkit,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("Hel

假设我们有这样一个代码:

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会删除它吗

你能解释一下“元素”元素什么时候被移除吗


注:我正试图用node webkit编写一个简单的应用程序,需要这样的代码才能让node webkit打开文件对话框(打开文件、保存文件等)并处理其结果。

函数中定义的变量仅在函数执行时存在于函数中

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

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


侧注:它是
.createElement()
而不是
.create()
(除非您的代码定义了
.create()
方法..)

这假设
回调
不会保存
事件.目标
事件.srceelement
,它们也是对元素的引用。还请注意,如果函数中定义的变量被闭包捕获,则它们可能比函数更长寿。@RaymondChen是的,有很多方法可以使其持久。但这不是真正的问题。问题是给定的数据会发生什么code@CrayonViolent是的,你是对的。这真的是
createElement
,对不起)那么,这是否意味着我每次访问
someName
功能时都可以创建一个新的输入,并且不会污染环境?我之所以问这个问题,是因为我不确定如果用户单击Cancel按钮会发生什么(因此,不会调用事件处理程序)。如果我使用
someName
函数中的
callback
变量执行任何操作,它不会影响该输入的范围,是吗?@dw和low这取决于您实际尝试执行的操作。就你发布的代码而言,我可以对你的问题说“是”,因为我在回答中说了什么。但这可能不适用于你实际想要做的事情。在这个函数和回调函数中,有很多事情都可能(有意或无意)导致输入字段粘滞。这可能是也可能不是坏事,这取决于你到底想做什么。但同样,与其猜测一个开放式的问题,不如编写代码,然后发表评论