Lined Notebook

클로저

by yjym33

클로저(closure)의 개념

 

클로저(closure)는 자바스크립트에서 중요한 개념 중 하나입니다.

클로저는 자바스크립트 고유의 개념이 아니고 함수형 프로그래밍 언어에서 사용하는 중요한 특성입니다.

function outerFunc() {
  var x = 10;
  var innerFunc = function () { console.log(x); };
  innerFunc();
}

outerFunc(); // 10

 

예제를 보면,

  • 먼저 함수 outerFunc()를 정의하고, 그 안에 함수 innerFunc()를 정의했다.
  • 그러고 나서, 변수 inner에 함수 outerFunc()에서 반환된 함수 innerFunc()를 담고 바로 호출을 시도한다.
  • 호출 후에 10이라는 숫자가 반환되어 출력되었다.

 

여기서 의문점은 분명 함수 outerFunc()는 내부 함수 innerFunc()를 반환하고 생을 마감했다는 점이다.

그런데 outerFunc의 지역변수 x가 다시 부활이라도 한 듯 함수 innerFunc()에서 동작하고 있다.

 

 

그것은 바로 내부 함수 innerFunc()가 호출될 때, 외부 함수 outerFunc()의 환경(Lexical environment)을 기억하고 있기 때문이다.

즉, 클로저(closure)는 반환된 내부 함수가 자신이 선언되었을 때의 환경(Lexical environment)인 스코프를 기억하여, 자신이 선언됐을 때의 환경(스코프) 밖에서 호출되어도 그 환경(스코프)에 접근할 수 있는 함수를 말한다.

더 간단히 말한다면, 클로저는 자신이 생성될 때의 환경(Lexical environment)을 기억하는 함수라고 말할 수 있다.

그렇기 때문에 외부 함수 outerFunc()에 있는 변수 x의 값 10이 내부 함수 innerFunc() 안에 있는 console.log(x)에서 그 환경을 기억하고 10이라는 값을 출력할 수 있었던 것이다.

 

이처럼 외부 함수 밖에서 내부 함수가 호출되더라도 외부 함수의 지역 변수에 접근할 수 있다.

그 이유는 자신이 생성될 때의 환경(Lexical environment)을 기억하고 있기 때문이다.

그렇기 때문에 이러한 함수를 클로저(Closure)라고 부른다.

 

 

 

'Development > Javascript' 카테고리의 다른 글

This  (0) 2023.09.20
이벤트  (0) 2023.09.20
실행 컨텍스트  (0) 2021.08.06
프로토타입  (0) 2021.08.04
함수  (0) 2021.08.03

블로그의 정보

생각보다 실천을

yjym33

활동하기