JavaScript中变量的生命周期是什么,用“var”声明。 我相信,这绝对不是出乎意料的。
<script>
function(){
var a;
var fun=function(){
// a is accessed and modified
}
}();
</script>
这里JavaScript垃圾如何以及何时收集变量a
?由于a
是内部函数闭包的一部分,理想情况下它应该永远不会被垃圾收集,因为内部函数fun
可以作为对外部上下文的引用传递。因此,fun
仍然可以从外部上下文访问a
。
如果我的理解是正确的,那么垃圾收集是如何发生的,以及如何确保有足够的内存空间,因为将所有变量保留在内存中直到程序的执行可能不成立?
答案 0 :(得分:4)
ECMAScript规范没有规定垃圾收集器应该如何工作,它只是说如果一个标识符是可达的(通过直接指针或闭包),它就不应该被GC。
查看有关ECMAScript中标识符解析,闭包,范围链和垃圾收集的this文章。
希望有所帮助
答案 1 :(得分:1)
'a'就不会被垃圾收集。浏览器通过向操作系统请求更多内存来确保它有足够的内存。