11

What is the lifetime of a variable in JavaScript, declared with "var". I am sure, it is definitely not according to expectation.

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


</script>

Here how and when does JavaScript garbage collect the variable a? Since a is a part of the closure of the inner function, it ideally should never get garbage collected, since the inner function fun, may be passed as a reference to an external context. So fun should still be able to access a from the external context.

If my understanding is correct, how does garbage collection happen then, and how does it ensure to have enough memory space, since keeping all variables in memory until the execution of the program might not be tenable ?

1
  • This is a great question btw. It points out that the closure itself isn't the only thing that is held in memory until the closure is GC'ed. The entire scope chain of the function is as well. There appears to be some controversy, but some additional thought would seem to indicate that every function declaration in JavaScript is a closure, relative to the global scope. However there is an exception see this answer Commented Mar 17, 2016 at 17:15

2 Answers 2

5

The ECMAScript specification does not specify how the garbage collector should work, it only says that if an identifier is reachable (through a direct pointer or a closure), it shouldn't be GCed.

Check out this article about identifier resolution, closures, scope chaining and garbage collection in ECMAScript.

Hope it helps

Sign up to request clarification or add additional context in comments.

1 Comment

Alas, dead link
1

'a' will not be garbage-collected as long as there are external references to 'fun'. The browser ensures it has enough memory by asking for more memory from the OS.

1 Comment

"The browser ensures it has enough memory by asking for more memory from the OS." - lol... fair enough :-)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.