[JS] Closure(클로저)의 개념, 특징, 장점, 예시

클로저(Closure) - 죽은 함수의 망령

Over view

함수가 실행될 때 해당 함수와 그 실행에 관련된 정보가 Call stack이란 공간에 놓임

Closure

Closure는 함수가 실행될 때 정의된 환경(렉시컬 스코프)을 기억하여, 외부 함수의 변수를 유지하는 개념

Lexical scoping

함수가 선언된 위치에 따라 해당 함수가 사용할 수 있는 변수의 범위가 결정

즉, 코드를 작성한 위치가 변수의 유효 범위를 결정하여 실행 위치와 관계없이 함수가 선언된 위치에서 상위 스코프를 찾음

스코프란

변수가 어디에서 접근할 수 있는지에 대한 유효 범위를 의미

종류

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