클로저(closure)란?

조성철 (JoSworkS)·2020년 3월 3일
3

TIL(Today I Learned)

목록 보기
27/73
post-thumbnail

클로저(closure)

클로저(closure)란, 외부 함수에 접근할 수 있는 내부 함수 혹은 이러한 원리를 일컫는 용어인데 스코프에 따라서 내부함수의 범위에서는 외부 함수 범위에 있는 변수에 접근이 가능하지만 그 반대는 실현이 불가능하다는 개념이다.

특징으로는 외부함수는 외부함수의 지역변수를 사용하는 내부함수가 소멸될 때까지 소멸되지 않는다.예를 들어 한 함수안에 다른 함수가 있다면 그 안의 함수는 바깥에 정의해놓은 변수를 사용할 수 있지만 그 반대는 가능하지 않다.

예제

다음은 MDN의 closure에 있는 이해하기 쉬운 예시 코드이다.

function makeFunc() {
  var name = "Mozilla";
  function displayName() {
    alert(name);
  }
  return displayName;
}

var myFunc = makeFunc();
//myFunc변수에 displayName을 리턴함
//유효범위의 어휘적 환경을 유지
myFunc();
//리턴된 displayName 함수를 실행(name 변수에 접근)

일반적으로는 함수 안의 지역 변수들은 그 함수가 처리되는 동안에만 존재하기 때문에 displayName 함수가 리턴되면 name변수에 접근 할 수 없다고 예상된다. 하지만 자바스크립트에서는 함수를 리턴할 때, 클로저를 형성하기 때문에 클로저가 형성될 당시의 함수와 함수가 선언된 어휘적 환경의 조합(쉽게 말해 당시의 관계되는 코드들)의 참조를 유지한다.(즉, 기억한다.)

따라서 myFunc함수를 호출하면 name 변수는 클로저에 의해 기억되고 있기 때문에 "Mozilla"가 alert에 전달되게 된다.

참고자료

0개의 댓글