【发布时间】:2013-09-23 22:21:13
【问题描述】:
我了解闭包中的代码可以访问作用域链上的变量、方法和参数, 但是如果它不使用它们中的任何一个会发生什么?这些变量还保留吗?
考虑这种情况:
function f(){
var a=[];
for(var i=0;i<1000000;i++) a.push({});
return function(){
alert('Hi');
};
}
var x = f();
变量a 是否保留在内存中,即使闭包不使用它?
谢谢
更新: 似乎没有关于“微不足道”的闭包的答案。 那么假设每个闭包(即使它什么都不做)都可以在内存中保留作用域链上的所有方法,包括它们的参数、变量和内部函数(直到闭包被垃圾回收),这是否公平?
此外,关于 node.js 的“可能重复”问题 - 据我所知,node.js 仅在基于 google 的 v8 JS 引擎的专用环境中运行。这里我说的是可以在任何现代浏览器中运行的网络应用程序(在大多数情况下)
【问题讨论】:
-
你永远无法真正知道...... JS 实现可以为所欲为。进行静态代码分析的聪明垃圾收集器可以收集值,但不能保证。
-
garbage collection with node.js 的可能重复项(及其相关问题)
-
经验法则:对于带有愚蠢垃圾收集器的(旧)引擎,最好明确设置
a=null。 -
如果我们只假设相对较新的浏览器,这是一个需要担心的问题吗?
标签: javascript memory closures