자바스크립트 JS - 클로저 (Closure)

hyunnu·2021년 4월 1일
0
post-thumbnail

📖 Review (21.04.01)

클로저 (Closure)

외부함수에 접근할 수 있는 내부함수

정의: 함수와 함수가 선언된 어휘적(lexical) 환경의 조합, 이 환경은 클로저가 생성된 시점의 유효범위 내에 있는 모든 지역 변수로 구성된다.

조금 더 쉽게 말하자면, 함수 내에서 다른 함수(내부 함수)가 리턴이 되면, 이 함수를 클로져 함수라고 부르고, 외부 함수에 있는 변수에 접근 가능하다.

쉽게 말하자면 밖에서는 안이 보이지 않고 안에서는 밖을 볼 수 있다. ex)썬팅된 차량

클로저는 자바스크립트 고유의 개념이 아니라 함수를 일급 객체로 취급하는 함수형 프로그래밍 언어(Functional Programming language: 얼랭(Erlnag), 스칼라(Scala), 하스켈(Haskell), 리스프(Lisp)…)에서 사용되는 중요한 특성이다.

다음 예제 코드를 보자,

function init() {
  var name = "Mozilla"; // name은 init에 의해 생성된 지역 변수이다.
  function displayName() { // displayName() 은 내부 함수이며, 클로저다.
    alert(name); // 부모 함수에서 선언된 변수를 사용한다.
  }
  displayName();
}
init();
  • init()은 지역 변수 name과 함수 displayName()을 생성한다.

  • displayName()init() 안에 정의된 내부 함수이며 init() 함수 본문에서만 사용할 수 있다.

  • 여기서 주의할 점은 displayName() 내부엔 자신만의 지역 변수가 없다는 점이다. 그런데 함수 내부에서 외부 함수의 변수에 접근할 수 있기 때문에 displayName() 역시 부모 함수 init()에서 선언된 변수 name에 접근할 수 있다. 만약 displayName()가 자신만의 name변수를 가지고 있었다면, name대신 this.name을 사용했을 것이다.

profile
Data Engineer / Back-End Developer

0개의 댓글