[javascript] 실행 컨텍스트와 클로저의 메모리 관리 방식은 어떻게 달라지는가?

자바스크립트에서 실행 컨텍스트와 클로저는 메모리 관리에 있어 중요한 역할을 합니다. 각각의 메모리 관리 방식을 살펴보겠습니다.

실행 컨텍스트의 메모리 관리

실행 컨텍스트는 코드가 실행될 때 생성되며, 해당 스코프 안에서 변수 객체, 스코프 체인, this 키워드에 대한 정보를 담고 있습니다.

변수 객체는 실행 컨텍스트 내에 로컬 변수 및 함수 선언을 저장하는데, 실행 컨텍스트가 종료되면 해당 변수 객체는 메모리에서 해제됩니다.

클로저의 메모리 관리

클로저는 함수와 함수가 선언된 렉시컬 스코프를 기반으로 동작합니다. 함수가 종료되더라도 렉시컬 스코프의 환경을 유지하는 특성을 가지고 있기 때문에, 클로저가 참조하는 변수나 함수는 실행 컨텍스트가 종료되어도 메모리에서 해제되지 않습니다. 클로저가 존재하는 동안에는 그에 속한 렉시컬 스코프의 모든 변수와 함수는 메모리에 남아 있게 됩니다.

따라서 실행 컨텍스트와 클로저의 메모리 관리 방식은 실행 컨텍스트는 해당 컨텍스트가 종료되면 메모리를 해제하지만, 클로저는 해당 클로저가 참조하는 렉시컬 스코프의 정보를 유지하여 메모리를 해제하지 않는다는 점에서 차이가 있습니다.

참고 자료:

  1. https://developer.mozilla.org/ko/docs/Web/JavaScript/Closures
  2. https://poiemaweb.com/js-execution-context
  3. https://poiemaweb.com/js-memory-management