假设我们有这样的代码:
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/