日期:2014-05-16  浏览次数:20397 次

JS闭包解除引用问题
function f1(){
 var n=999;
 return function f2(){
  alert(n);
  }
}

var a = f1();
a=null;
自学学到闭包 看书给我看迷糊了, 希望各位帮忙
以上代码是闭包。a保存了返回的函数。而且要解除a的引用。变量n才会回收。

那平常我声明了 var a = function(){} 。 我调用完a函数 也要解除引用吗? 但是函数表达式和函数声明除了函数提升以外没有区别啊。也没看到过 执行完 ,a();后 再a=null这样。现在越来越把函数声明和函数表达式弄不清了。而且上面闭包代码里说 a保存了返回的函数。 还是a指向那个函数啊 函数本身也是对象吧?
不知道小弟说的清不清楚 因为我现在实在是弄不清楚了 ,还有垃圾回收是回收函数 还是回收函数里的变量啊 函数本身占内存吗? 希望各位能详细解释下 。如果不明白我上面说的意思 可以留言我会马上回复的 谢谢了

------解决方案--------------------
引用:
那js的里垃圾回收 当我执行完一个函数对象 那是把这个对象从内存里回收掉 还是只把函数里的变量给回收啊?

~~你不引用 别人是不知道你又提问了的~~

垃圾回收是指:一个值,如果没有任何变量指向它,那么它就被回收。
你执行完一个函数,函数本身不会被回收。函数内部的变量是否回收要分情况:
如果是一般函数,没有闭包,那么函数内的局部变量就会被回收。
如果函数内有闭包,那么闭包会在函数执行完后仍然引用变量,也就是说变量不会被回收。