본문 바로가기
JavaScript

클로저(Closure)

by 완기 2020. 5. 20.
728x90
반응형

자바스크립트에는 클로저라는 함수가 있다.

이 클로저 함수가 뭐냐면 함수와 함수가 선언된 언어적(정적) 환경의 조합이다.

 

즉, 함수 안에 함수가 존재하는 함수의 중첩형태이다.

 

자바나 c를 공부했던 필자의 개념에선 이해하기 힘든 개념이었지만,

 

현직 프론트엔드 개발자로 근무하고 있는 필자의 사촌형에 따르면

 

"메모리에 변수 올려놓고 상태 관리하는거니까
core 문법으로 작성하려면 필수개념이긴하지"라고 언급했다.

 

이 이야기를 듣고 몇 가지 실제 사용 사례들이 떠오르지만, 정확하지 않아 언급은 피해야겠다.

 

바로 클로저함수의 예시를 보자 

function f1() {
            var a = 2;
            return function f2() {
                return a;
            }
        }

        var f = f1();
        var a = f();
        document.write(a);

 

위 코드와 같이 함수 f1함수안에 리턴되는 값이 f2함수이다. 

이를 클로저 함수라고 칭하고, f1()함수를 변수 f에 저장하고 f2()의 함수를 호출하지 않았기 때문에 함수는 계속 메모리를 점유하고있다.

 

var f=f1();

함수의 값이 변수 f에 담기면서 

var a = f();를 해줌으로써 메모리에 점유중인 함수가 소멸되고 a를 출력한 결과

브라우저에  2라는 결과가 출력이 됐다.

 

 

떄문에 클로저 함수의 사용이 많아지면 메모리 누수가 많아진다고 한다.

 


 

 

 

728x90
728x90

댓글