【发布时间】:2013-03-23 13:39:47
【问题描述】:
考虑一下the Mozilla Docs on JavaScript memory leaks的这句话:
function addHandler() { var el = document.getElementById('el'); el.onclick = function() { this.style.backgroundColor = 'red'; } }上面的代码设置元素被点击时变成红色。它 还会造成内存泄漏。为什么?因为对 el 的引用是 无意中陷入为匿名内部创建的闭包中 功能。这会在 JavaScript 之间创建循环引用 对象(函数)和原生对象(el)。
请用简单明了的方式解释上述泄漏的原因,我没有得到确切的意思。
网站/页面是否因泄漏而面临安全问题?我该如何避免它们?还有哪些其他代码会导致内存泄漏?如何判断何时发生内存泄漏?
我是内存泄漏主题的绝对初学者。有人可以一步一步地为我澄清这些东西吗?还有人可以帮我澄清这个陈述“这会在 JavaScript 对象(函数)和本机对象(el)之间创建循环引用。”
【问题讨论】:
-
@GrantKiely 来自 MDN
-
@Maizere:你得到报价的地方(MDN,我现在在问题的正文中链接到它)很好地解释了这种特殊的内存泄漏。是否有您不了解的具体内容,或者您是否希望深入了解闭包?
-
顺便说一下,我想强调这是一个Microsoft 独有的错误。通过在您的代码中放置此类循环引用,您会进一步降低 IE 体验,从而鼓励用户切换到更好、更安全的浏览器,因此请抓住一切机会这样做。
-
@CrescentFresh 我没有收到此语句“因为对 el 的引用无意中被捕获在为匿名内部函数创建的闭包中。这会在 JavaScript 对象(函数)和本机对象(el)。”英语不太好,所以需要一个简单的解释
标签: javascript internet-explorer memory-leaks garbage-collection circular-reference