[JS] Closure(클로저)의 개념, 특징, 장점, 예시
함수가 실행될 때 해당 함수와 그 실행에 관련된 정보가 Call stack이란 공간에 놓임
Closure는 함수가 실행될 때 정의된 환경(렉시컬 스코프)을 기억하여, 외부 함수의 변수를 유지하는 개념
함수가 선언된 위치에 따라 해당 함수가 사용할 수 있는 변수의 범위가 결정
즉, 코드를 작성한 위치가 변수의 유효 범위를 결정하여 실행 위치와 관계없이 함수가 선언된 위치에서 상위 스코프를 찾음
변수가 어디에서 접근할 수 있는지에 대한 유효 범위를 의미
종류
Example
const globalVar = "global";
function outer(outerParam) {
const outerVar = "outerVar";
function inner(innerParam) {
const innerVar = "innerVar";
console.log(globalVar); // global
console.log(outerVar); // outerVar
console.log(outerParam); // outerParam
console.log(innerVar); // innerVar
console.log(innerParam); // innerParam
}
return inner;
}
const innerOut = outer("outerParam");
innerOut("innerParam");
console.log(typeof outerVar); // undefined
console.log(typeof innerVar); // undefined