함수가 선언될 때의 스코프를 기억하여, 함수가 생성된 이후에도 그 스코프에 접근할 수 있는 기능
비유하자면, 함수가 자신이 생성된 환경을 '기억'하는 것
자바스크립트의 함수가 일급 객체라는 특성 + 렉시컬 스코프의 조합으로 만들어짐
function outerFunction(outerVariable){
return function innerFunction(innerVariable){
console.log('Outer Variable: ' + outerVariable);
console.log('Inner Variable: ' + innerVariable);
}
}
const newwFunction = outerFunction('outside');
newFunction('inside');
여기서 innerFunction은 outerFunction의 내부에 정의, 즉 자신이 생성된 스코프, outerFunction의 스코프를 기억하고, outerFunction의 호출이 완료된 이후에도 그 스코프에 접근할 수 있음. 그리고 innerFunction은 outerVariable에도 접근할 수 있음.
변수, 함수의 접근 범위 제어 + 특정 데이터와 상태를 유지하기 위해 활용
function createLogger(name){
return function() {
consol.log(`Logger: ${name}`);
};
}
const logger = createLogger('MyApp');
setTimeout(logger, 1000); // 1초 후 'Logger: MyApp'출력
name변수를 저장하여 1초 후에도 해당 값이 유지되어 출력