<aside> 💡 클로져 쉽게말해, 자신이 생성된 환경을 기억하는 함수를 클로져라고 한다.
</aside>
내부 함수가 외부함수의 변수에 접근 하는것을렉시컬 스코핑
이라고 한다.
반대로, 외부함수는 내부함수의 변수에 접근할 수 없다.
다른 말로는 정적 스코핑
, 스코프 체인
등으로도 불린다.
함수가 실행되면 스택에 실행컨텍스트가 만들어지고, 그 실행 컨텍스트 안에는 변수객체가 존재한다. 또한 그 변수객체 안에는 이전 실행 컨텍스트의 변수객체에 존재하는 스코프 체인에다가 자신의 변수객체를 추가한다.
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
라는 함수 팩토리는 클로져를 만들어주는 함수이다.