클로저는 함수 안에 또 다른 함수를 선언할 때, 두 함수의 유효 범위(로컬 영역, 글로벌 영역)가 맞물리면서 부모함수로부터 반환된 후에도 부모함수의 유효범위에 여전히 접근할 수 있는 것을 의미한다.(자식 함수의 전역 = 부모 함수의 로컬이므로)
function outerFunc(){
let x = 10;
let innerFunc = function(){
console.log(x);
}
return innerFunc;
}
var returnedValue = outerFunc();
returnedValue();
위와 같은 함수가 있을 때 outerFunc의 실행 컨텍스트 안에 포함되는 변수 x는 outerFunc() 밖에서는 남아있을 수 없어야 하지만, outerFunc 안에서 정의된 innerFunc 함수를 리턴했고, innerFunc 안에서 해당 변수 x를 참조하고 있기 때문에, 변수 x는 innerFunc이 남아있는 한 계속 사용할 수 있게 된다.
다음과 같은 활용도 가능하다.
function outer(arg1, arg2){
var localVar = 8;
function inner(innerArg){
console.log((arg1 + arg2) / (innerArg + localVar));
}
return inner;
}
outer(16, 14)(2);