所以我找到了这段代码,它显然有效(因为它已经在生产多年):
window[someMethod] = function (tmp) {
callback({prop:"val"}, tmp);
// Garbage collect
window[someMethod] = undefined;
try {
delete window[someMethod];
}
catch (e) { }
if (head) {
head.removeChild(script);
}
// head refers to DOM head elem and script refers to some script file elem
};
很想知道,它是如何运作的?
undefined
及其try
内的delete
undefined
本身?delete
和{{1}}?怎么样?答案 0 :(得分:21)
希望这是有道理的。
答案 1 :(得分:3)
请记住,您无法显式删除Javascript中的内容。您所能做的就是删除对它的所有引用,然后让垃圾收集器在下一个周期中将其删除。在此函数结束时,函数本身仍在内存中,但没有外部引用。下次GC运行时,它会发现它并释放其内存。
答案 2 :(得分:2)
window [someMethod]只是一个引用。仅删除引用,而不删除函数本身。 一旦函数完成,并且删除了对它的所有引用,垃圾收集应该处理它,避免内存泄漏。