Archive

클로저(closure) 넌 대체...

|

[펌] 클로저(closure) 넌 대체…


요약 :

렉시컬 환경 (Lexical Environment) : 특정 코드가 작성, 선언된 환경

  1. 함수와 렉시컬 환경의 조합

  2. 함수가 생성될 당시의 외부 변수를 기억, 생성 이후에도 계속 접근 가능

    function a(x) {
        return function(y) {
            return x + y;
        }
    }
       
    const b = a(3);
    console.log(b(2)); // 5
    

    처음 전역 렉시컬 환경에 a는 function, b는 초기화가 안된 상태로 정의된다.

    const b = a(3); 구문이 실행되면서 a의 렉시컬 환경에 x가 3인 상태로 저장된다.

    console.log(b(2));구문이 실행되면서 a의 return 함수에 대한 렉시컬 환경이 생성되고 y의 값이 2로 저장된다. 따라서, x + y의 값이 5로 찍힐 수 있다. a가 생성된 이후에도 하위 함수에서 상위 함수의 x에 접근이 가능한 것을 볼 수 있는데 이 것을 클로저라고 한다.

  3. 스코프는 함수를 호출할 때가 아니라 함수를 어디에 선언하였는지에 따라 결정된다. 이를 렉시컬 스코핑이라 한다.

  4. 클로저가 없다면 상태를 유지하기 위해 전역 변수의 사용이 잦아져 많은 부작용을 일으킬 수 있다.

  5. 클로저를 사용하면 불변성을 지키고 Side Effect를 최소화 할 수 있다.

  6. 하지만 클로저를 남발하면 메모리 문제로 오버 플로우가 발생하고 스코프 체인을 거슬러 올라가는 동작이 많아 성능 문제로 이어질 수 있다.



참고 자료


모던 자바스크립트 Deep Dive

[javascript] 클로저(closure)에 대해서 알아보자

zeroCho - 실행 컨텍스트

자바스크립트 중급 강좌 #11 클로저(Closure) 5분만에 이해하기