클로져 개념 정리

<aside> 💡 클로져 쉽게말해, 자신이 생성된 환경을 기억하는 함수를 클로져라고 한다.

</aside>

Lexical Scoping(렉시컬 스코핑)

내부 함수가 외부함수의 변수에 접근 하는것을렉시컬 스코핑이라고 한다.

반대로, 외부함수는 내부함수의 변수에 접근할 수 없다.

다른 말로는 정적 스코핑, 스코프 체인등으로도 불린다.

함수가 실행되면 스택에 실행컨텍스트가 만들어지고, 그 실행 컨텍스트 안에는 변수객체가 존재한다. 또한 그 변수객체 안에는 이전 실행 컨텍스트의 변수객체에 존재하는 스코프 체인에다가 자신의 변수객체를 추가한다.

클로져의 활용

모듈 패턴

var module = (function(){
		//private 변수와 메소드들
    var localVar = 1913;
    var localFunc = function() {
        return localVar;
    }
    var otherLocalFunc = function(num) {
        localVar = num;
    }
    return {
				//public method 외부에 공개
        getVar: localFunc,
        setVar: otherLocalFunc
    }
})();

함수팩토리

var functionFactory = function(num1) {
    return function(num2) {
        return num1 * num2;
    }
}
var mult5 = functionFactory(5);
var mult10 = functionFactory(10);

함수를 만드는 함수를 함수 팩토리라고 한다.

num1이라는 자유변수를 참조하는 내부함수는 num2라는 매개변수를 받는다.

functionFactory라는 함수 팩토리는 클로져를 만들어주는 함수이다.