<aside> 💡 실행 컨텍스트가 정상적으로 종료되지 못하는 현상

</aside>

function add(a,b) {
	let sum = a + b
	return sum;
}
const sum = add(10, 20); // 함수 실행이 종료되면 sum은 메모리에서 사라짐
console.log(sum);
function  outerFunc() {
	let count = 0;
	
	return function innerFinc() {
		ount++;
		console.log(count;
	}
}

const counter = outerFunc();
counter(); // 1
counter(); // 2
counter(); // 3
counter(); // 4

⇒ 함수 실행이 종료됐는데 count가 사라지지 않고 계속 증가함

  1. outer가 실행돼서 counter와 innerFunc을 기록
  2. inner 함수 리턴해줌
  3. 제거하려 했는데 반환한 함수가 outer 실행 컨텍스트의 변수를 참조하고 있음
  4. outer를 메모리에서 제거하면 inner는 누굴 참조해? ⇒ 논리적 오류 발생 ⇒ outer가 살아있어야 함

⇒ 콜스택에서 제거를 하되 실행 컨텍스트를 임시 보관

참조하는 코드가 제거될 때까지 임시 보관

⇒ 클로저

⇒ js상 메모리 누수가 발생하는 상황임

⇒ 클로저 코드를 사용했다면 참조를 끝낼 때 메모리 제거를 해줘야 함

counter = null; // 메모리 제거