클로저(Closure)

Voler Web·2022년 8월 31일

Word

목록 보기
13/23

클로저

클로저는(closure)는 자바스크립트에서 중요한 개념 중 하나입니다.
실행 컨텍스트를 알고 있다면 쉽게 이해할 수 있는 개념입니다.

내부 함수가 외부 함수의 맥락(context)에 접근할 수 있는 것을 나타냅니다.
외부 함수는 외부 함수의 지역변수를 사용하는 내부 함수가 소멸될 때까지 소멸되지 않는 특성을 의미합니다.

예제

    function makeFunc() {
      var name = "voler";
      function alertName() {
        alert(name);
      }
      return alertName;
    }

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

외부 함수인 makeFunc()로부터 내부에 있는 alertName() 함수가 실행되기 전에 리턴되어 myFunc변수에 저장되는 예제입니다.
현재 예제만 보게 되면 현재 이 코드가 여전히 작동하는 것으로는 보이지 않을 수 있습니다. 몇몇 프로그래밍 언어 세터는 함수 안의 지역 변수들은 그 함수가 처리되는 동안에만 존재하기 때문이죠, makeFunc() 함수 실행이 끝나게 되면 (alertName() 함수가 리턴되고 나면) name변수에 더 이상 접근할 수 없게 될 것으로 예상하는 것이 일반적입니다.

하지만 위의 예시와 자바스크립트의 경우는 다릅니다. 그 이유는 자바스크립트는 함수를 리턴하고, 리턴하는 함수가 클로저를 형성하기 때문입니다. myFunc 변수는 makeFunc() 함수가 실행될 때 생성된 alertName() 함수의 인스턴스에 대한 참조입니다. alertName의 인스턴스는 변수 name 이 있는 어휘적 환경에 대한 참조를 유지하며 이런 이유로 myFunc가 호출될 때 변수 name은 사용할 수 있는 상태로 남게 되고 "voler"가 alert에 전달되게 됩니다.

출처:MDN

profile
공부하려 끄적이는 velog

0개의 댓글