5-3-1 콜백 함수 내부에서 외부 데이터를 사용하고자 할 때

Untitled

코드 4번 줄의 forEach 메소드에 넘긴 콜백 함수 (A)는 내부에서 외부 변수를 참조하지 않아서 클로저가 없지만, addEventListener에 넘겨준 콜백 함수(B)에서는 fruit라는 외부 변수를 참조하므로 클로저가 있다.

→ A가 실행될 때마다 새로운 실행 컨텍스트가 활성화된다.

코드 7번 줄에서 addEventListener는 외부 함수인 fruit 함수를 참조하고 있으며, fruit함수의 종료 여부와 무관하게 클릭리스너 발생 시 이벤트 리스너의 outerEnvironment가 fruit의 LexicalEnvironment를 참조하게 된다.

따라서 B가 참조할 예정인 A의 변수 fruit에 대해서는 A 종료 후에도 GC대상에서 제외되어 계속 참조가 가능하다.

고차함수를 활용한 version

Untitled

alertFruitBulder 함수 내부에서는 실행 결과로 익명 함수를 반환한다. 이 함수가 addEventListener의 콜백 함수로 할당된다. 클릭 이벤트가 발생하면 이 함수의 실행 컨텍스트가 열리면서 인자로 넘어온 fruit를 outerEnvironmentReference에서 참조가 가능하다. 즉 alertFruitBuilder의 실행 결과로 반환된 함수에는 클로저가 존재한다.

5-3-2 접근 권한 제어(정보 은닉)

정보은닉이란?

어떤 모듈의 내부 로직에 대해 외부로의 노출을 최소화해서 모듈 간의 결합도를 낮추고 유연성을 높이고자 하는 개념