함수와 함수가 선언된 어휘적 환경의 조합이다.
다른 간단한 정의도 살펴보면
다른 함수 내부에 정의된 함수(innerFunction)가 있는 경우 외부 함수(outerFunction)가 실행을 완료하고 해당 변수가 해당 함수 외부에서 더 이상 액세스할 수 없는 경우에도 해당 내부 함수는 외부 함수의 변수 및 범위에 액세스할 수 있습니다.
예시를 통해 확인해보자.
function outerFunction(outerVariable) {
// 내부 함수
return function innerFunction(innervariable) {
console.log('Outer Variable ' + outerVariable);
console.log('Inner Variable ' + innervariable);
};
}
const newFunction = outerFunction('outside');
newFunction('inside');
// Outer Variable outside
// Inner Variable inside
console.log(newFunction); // [function:innerFunction]
// newFunction('inside');
outerFunction은 InnerFunction을 return한다.
그럼 newFunction 이 선언된 순간부터 천천히 따라가면
const newFunction = outerFunction('outside');
// ->
const newFunction = function innerFunction(innervariable) {
console.log('Outer Variable ' + outerVariable);
console.log('Inner Variable ' + innervariable);
};
(왜 이렇게 되느냐? 함수가 함수를 return하기 때문이다.)