让我说我有一个'神奇'的功能......(神奇的将被解释)
var arr = ['hello','I','am','in','an','array'];
(function() {
var z = document.getElementById('z');
//before edit: a = arr;
//let's leak memory... for fun!
z.onclick = function () {
var something = ...; //something, the uglier the better :P
//before edit: a.push(something);
arr.push(something);
something = null;
};
//now lets say by doing so I 'magically' fix my memory leak
//before edit: a = z = null;
z = null;
}());
但如果我这样做会怎么样......
//instead of a = z = null;
return null;
通过将null重新调整为我的自调用函数会标记所有本地变量(a,z)以进行垃圾回收,还是它们仍会在浏览器中引用并因此仍占用内存?
注意:我正在尝试考虑ie7等传统浏览器。此外,我正在'尝试'自学JavaScript,所以这可能没有多大意义。
答案 0 :(得分:4)
因为你已经将闭包函数绑定到onclick。保持与“var a”关联的内存,直到您释放onclick处理程序。
- 即使你没有将'var a'设置为null,与'var a'关联的内存也应该是无关紧要的,因为'var a'只引用了一个全局对象'arr'。
- 将'var z'设置为null无效。
- 如果您可以避免在闭包中使用'var a',那么'var a'将被释放。
- 当点击发生时,函数将获得运行时错误,因为'var a'为空。
- 从函数返回null对内存使用没有意义。
醇>