调用 removeChild(el) 时是不是删除了 el.onclick? [复制]

Posted

技术标签:

【中文标题】调用 removeChild(el) 时是不是删除了 el.onclick? [复制]【英文标题】:Is el.onclick removed when removeChild(el) is called? [duplicate]调用 removeChild(el) 时是否删除了 el.onclick? [复制] 【发布时间】:2018-04-24 05:07:30 【问题描述】:

以下代码创建和删除一个带有 onclick 侦听器的按钮。

从 DOM 中移除元素后,onclick 监听器是否仍然存在?

let el = document.createElement('button')
el.innerhtml = "Test Button"
el.onclick = function()
    alert('A Click Happened')


document.body.appendChild(el)
document.body.removeChild(el)

奖励:el.addEventListener('click',() => alert('clicked') ) 也一样吗?

【问题讨论】:

逻辑上:元素被销毁后,附着在元素上的监听器如何持续存在? 【参考方案1】:

不,它不会持续存在,因为您要删除具有onClick() 属性的元素。 addEventListener() 则不然。

我觉得我正在为你回答一个测试问题,但我希望它会有所帮助。 :)

【讨论】:

处理程序是否持久化与 DOM 元素是否在 DOM 中无关。它是关于代码中某处是否存在对该元素的引用。 他在元素内部定义函数。因此删除元素会删除该功能。它没有理由持续存在,因为它只针对引用元素。 删除元素与垃圾回收元素不同。

以上是关于调用 removeChild(el) 时是不是删除了 el.onclick? [复制]的主要内容,如果未能解决你的问题,请参考以下文章