클로저 Closures

지원 ·2023년 5월 16일
post-thumbnail

Closures란?

클로저는 내부 함수에서 외부 함수에 있는 상태에 접근할 수 있는 권하을 주는 것을 의미한다.

Closures는 무언가를 페쇄하다, 닫는다라는 의미를 가지고 있다고 생각하고 클로저에 대한 개념을 접근 조금 더 수월하다.

사전 지식

  • 스코프 (lexical 환경, 전역 스코프, 지역 스코프)
  • 함수

Scope Review

function outer()부터 lexical 환경이 만들어진다.
그럼 outer()를 호출하는 순간 무슨 일이 일어날까?

  1. outer 스코프 lexical 환경이 만들어진다. 그리고 outer 환경에 어떤 내용이 있는지 확인 후, 이를 환경에 레코드하는 것이다. 이미지에서는 x = 0 변수가 outer lexical 환경에 레코드 되는 것이다.

  2. 다음은 inner 함수를 발견해서 inner 스코프가 만들어진다. 그리고 inner scope는 outer scope를 참조할 수 있어서 x의 값은 0으로 결정한다.

  3. inner() 함수가 호출이되고 끝나는 순간 inner 함수는 이제 종료되는 것이다. outer()를 호출했을 때도 동일하다.


Closures

Scope 이미지랑 뭐가 다른지 보이시나요?

  • inner()롤 호출 않고, inner를 return으로 반환한다.
  • 그리고 lexical 환경 밖에서 inner()를 호출하면 innerscope를 가르키고 있는 것이다.
  • inner 스코프안에 x는 outer scope에 접근할 수 있어서 x의 값은 0이 된다.

정리

Closures의 의미는 페쇄, 닫히는 느낌으로 알 수 있다.
클로저는 환경에 대한 조합을 의미하고, inner scope가 outer scope에 접근할 수 있는 것을 의미한다.

0개의 댓글