scope chain의 기준이 되는 scope를 벗어나면 GC에 의해 해제 됩니다.
예를 들어,
function foo () {
var a = 10;
}
foo();
에서 a는 실행된 후 GC에 의해 해제됩니다.
하지만 클로저를 사용한 경우에는 다릅니다.
function foo() {
var a = 10;
return function() {
console.log(a);
}
}
var bar = foo();
bar();
이 경우에는 bar() 이후에도 a는 메모리에 남게됩니다.
위를 이용해서 메모리 해제를 합니다. 사실 클로저를 사용할 때를 제외하고는 메모리에 대해 크게 걱정하지 않습니다. 사실 전역 공간을 더럽힌다고 하는데 전역 공간에 변수를 선언해서 사용하는 건 지양합니다.
페이지를 10번 새로고침한다면 (여기서 새로고침은 페이지 refresh가 아니라 remove() 등을 통해 페이지 이동 없이 현재 페이지에서 내용을 바꾸는 것으로 고려한다면)변수, 함수 역시 위의 기준대로 남아있고 없어집니다. 즉, 10번 남게 만드셨나면 10번 남고
(예를 들어 전역공간의 배열 var arr = [] 에 새로고침마다 push() 를 사용해서 값을 넣는다면)
그렇지 않다면 매번 남지 않을 것입니다.