9

JavaScript 中用“var”声明的变量的生命周期是多少。我敢肯定,这绝对不符合预期。

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


</script>

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

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

4

2 回答 2

4

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

查看这篇关于 ECMAScript 中的标识符解析、闭包、作用域链和垃圾收集的文章。

希望能帮助到你

于 2010-04-22T12:28:21.020 回答
1

只要有对“fun”的外部引用,“a”就不会被垃圾收集。浏览器通过向操作系统请求更多内存来确保它有足够的内存。

于 2010-04-22T12:58:51.207 回答