JavaScript变量的生命周期

时间:2010-04-22 11:55:02

标签: javascript variables garbage-collection lifetime

JavaScript中变量的生命周期是什么,用“var”声明。 我相信,这绝对不是出乎意料的。

<script>
function(){
   var a;
   var fun=function(){
     // a is accessed and modified  
     }
}();


</script>

这里JavaScript垃圾如何以及何时收集变量a?由于a是内部函数闭包的一部分,理想情况下它应该永远不会被垃圾收集,因为内部函数fun可以作为对外部上下文的引用传递。因此,fun仍然可以从外部上下文访问a

如果我的理解是正确的,那么垃圾收集是如何发生的,以及如何确保有足够的内存空间,因为将所有变量保留在内存中直到程序的执行可能不成立?

2 个答案:

答案 0 :(得分:4)

ECMAScript规范没有规定垃圾收集器应该如何工作,它只是说如果一个标识符是可达的(通过直接指针或闭包),它就不应该被GC。

查看有关ECMAScript中标识符解析,闭包,范围链和垃圾收集的this文章。

希望有所帮助

答案 1 :(得分:1)

只要外部引用“fun”,

'a'就不会被垃圾收集。浏览器通过向操作系统请求更多内存来确保它有足够的内存。