我经常看jQuery是如何做事的。不,我不使用任何全局变量,因此在成功回调返回后不应该有对xhr的引用。在这种情况下,我可以假设不会有任何内存泄漏。谢谢!将其作为答案发布,我会尽快接受它。 - Elias Van Ootegem
我也不知道。我想知道使用闭包传递引用到DOM元素是否存在内存问题的可能性。我记不得在哪里或何时,但你知道当你有一种直觉或模糊的回忆,认为某个代码可能会出问题吗?这就是我发布这个问题的原因。关于回调:xhr.onreadystatechange = callback在IE中可以工作,但只能工作一次,更离奇的是。我只能假设该函数绑定到了本地的xhr,需要一个本地函数。你回答了标题问题,所以我认为这个问题已经解决了。我对IE有一些想法,但字符数为0。 - Elias Van Ootegem
1在阅读你的回答时,我忍不住笑了好几次。我没有过度优化旧引擎的意图。确实,DC链接已经非常过时了。但是老实说,内存泄漏经常被谈论,但很难确定是什么原因导致了它们,为什么以及在哪里。我提供的MSDN链接讨论了DOM对象的循环引用,这非常接近我正在做的事情,再加上对DOM元素管理没有真正的控制,我变得好奇/紧张。我正在寻找一个“明确”的答案:“是什么原因导致了内存问题,哪个浏览器,为什么以及如何避免它们?” - Elias Van Ootegem
简短的回答是Flash。更长的回答是你说得对...你无法访问垃圾收集。内存管理实际上取决于浏览器供应商,并且除非您可以访问(并愿意跟踪)源代码,否则它将真正成为一个封闭的盒子,因为单个浏览器实际上不会给您此访问权限。MSDN文章中的循环引用反映了IE处理对象的早期实现(我说IE,因为它是DOM+script的组合),我怀疑它今天是否仍然正确。 - John Green
1任何明确的答案都会在开发人员意识到问题并花时间修复它之后过时。此外,新功能将添加新的泄漏(Canvas)。肯定有一些东西会始终导致内存泄漏(例如,在全局范围JS中持久化事物或将大量渲染对象添加到DOM中)。话虽如此,恐怕这个问题太模糊了,没有明确的答案。 - John Green
1顺便提一下,如果你错过了——我的Flash参考是如何创建内存泄漏的一个例子。;) - John Green
这又是一个太宽泛的问题了...你不能用C#做到,当然也不能用C++做到,你怎么能认为你可以用JS做到呢?: ) 特别是每个版本和小版本都会改变(有时会发生巨大变化)问题集。大多数浏览器都会为您提供特殊工具来检查事物。实际上,我刚在IE中找到了这个:http://blogs.msdn.com/b/gpde/archive/2009/08/03/javascript-memory-leak-detector-v2.aspx 请注意,它建议循环对象问题已完全得到缓解。所以...你引用的所有旧信息都已过时。 - John Green
window.onload = function()
{
//do some stuff, get URI, and call:
this['_init' + uri[0].ucFirst()](uri);//calls func like _initController
//ucFirst is an augmentation of the String.prototype
}
xhr.onreadystatechange=callback
对你不起作用。有趣。但实际上,这部分根本不重要,内存泄漏才是最有趣的事情。虽然我有一段时间没有使用 IE<9,但我从未见过这样的行为。 - freakishxhr
或prepareAjax
结果的引用吗? - freakishxhr
的引用。在这种情况下,我可以假设不会有任何内存泄漏。谢谢!将其作为答案发布,我会尽快接受它。 - Elias Van Ootegemxhr.onreadystatechange = callback
在IE中可以工作,但只能工作一次,更离奇的是。我只能假设该函数绑定到了本地的xhr,需要一个本地函数。你回答了标题问题,所以我认为这个问题已经解决了。我对IE有一些想法,但字符数为0。 - Elias Van Ootegembody
上使用它),并在onUnload
事件上放置解绑机制。至于IE的元素删除机制,我只想说一句话:天哪! :) - freakish