[Javascript] 클로저(Closure) 란?

배석재·2021년 8월 2일
0

Study

목록 보기
9/14

안녕하세요.
지난 포스팅에 이어서 모던 자바스크립트 Deep Dive 책을 바탕으로 스터디를 진행하면서 정리한 내용을 기술해보려합니다!


1. 클로저란?

클로저는 함수와 그 함수가 선언된 렉시컬 환경과의 조합이다.
출처) MDN


1-1. 렉시컬 스코프

자바스크립트 엔진은 함수를 어디서 호출햇는지가 아니라 함수를 어디에 정의했는지에 따라 상위 스코프를 결정한다. 이를 렉시컬 스코프(정적 스코프)라 한다.

렉시컬 환경의 "외부 렉시컬 환경에 대한 참조"에 저장할 참조값, 즉 상위 스코프에 대한 참조는 함수 정의가 평가되는 시점에 함수가 정의된 환경(위치)에 의해 결정된다. 이것이 바로 렉시컬 스코프다.

1-2. 함수 객체의 내부 슬롯 [[Environment]]

렉시컬 스코프가 가능하려면 함수는 자신이 호출되는 환경과는 상관없이 자신이 정의된 환경, 즉 상위 스코프(함수 정의가 위치하는 스코프가 바로 상위 스코프)를 기억해야 한다.
이를 위해 함수는 자신의 내부 슬롯 [[Environment]]에 자신이 정의된 환경, 즉 상위 스코프의 참조를 저장한다.

1-3. 클로저와 렉시컬 환경

외부 함수보다 중첩 함수가 더 오래 유지되는 경우 중첩 함수는 이미 생명 주기가 종료한 외부 함수의 변수를 참조할 수 있다.
이러한 중첩 함수를 클로저라 부른다.

1-4. 클로저의 활용

  1. 상태를 안전하게 변경하고 유지하기 위해 사용
  2. 상태를 안전하게 은닉하고 특정 함수에게만 상태 변경을 허용하기 위해 사용

1-5. 캡슐화와 정보 은닉

1-6. 자주 발생하는 실수


이상으로 클로저에 대한 포스팅을 마치도록 하겠습니다~!!

profile
"personality begins Where Comparison ends"

0개의 댓글