LHJ

I'm a FE developer.

7.1 스코프와 존재

03 May 2020 » js_lj

변수가 존재하지 않으면 그 변수는 스코프 안에 ‘있지 않음’을 직관적으로 알 수 있습니다.
즉, 아직 선언하지 않은 변수나 함수가 종료되면서 존재하지 않게 된 변수는 분명 스코프 안에 ‘있지 않습니다.’

그건 무슨 뜻일까요?
변수가 스코프 안에 있지 않다면, 그 변수는 존재하지 않는다는 말일까요?
꼭 그런 건 아닙니다.
그리고 여기서 스코프존재를 반드시 구별해야 합니다.

가시성(visibility) 이라고도 불리는 스코프는 프로그램의 현재 실행 중인 부분, 즉 실행 컨텍스트(execution context) 에서 현재 보이고 접근할 수 있는 식별자들을 말합니다.
반면 존재한다는 말은 그 식별자가 메모리가 할당된(예약된) 무언가를 가리키고 있다는 뜻입니다.
‘존재하지만 스코프 안에는 없는’ 변수의 예를 곧 살펴보겠습니다.

무언가가 더는 존재하지 않는다고 해도 자바스크립트는 메모리를 바로 회수하지는 않습니다.
그것을 계속 유지할 필요가 없다고 표시해 두면, 주기적으로 일어나는 가비지 콜렉션(garbage collection) 프로세스에서 메모리를 회수합니다.
자바스크립트의 가비지 콜렉션은 자동으로 일어나며, CPU나 메모리를 심하게 혹사하는 애플리케이션이 아니라면 프로그래머가 신경 쓸 필요는 없습니다.