[Javascript] Closure

less than 1 minute read

Closure?

MDN에서 Closure는 다음과 같이 정의 되어있다.

A Closure is the combination of a function and the lexical environment within which that function was decalred.

클로저란 함수와 함수가 선언되었을 때 존재하는 어휘적 환경의 조합이다.

function outer(){
	var outerVar = 'This is outer variable';

	return function inner(){
		var innerVar = 'This is inner variable';
		
		console.log(outerVar);
		console.log(innerVar);
	}
}

var closureFunc = outer();
closureFunc();

위 코드의 결과로, 다음이 출력된다. This is outer variable This is inner variable

실제 변수 outerVal의 scope는 outer 내부이므로 outer()가 실행되는 동안만 존재하고 소멸되는 변수이다. 하지만 실제로는 scope가 선언될 때 결정이 되므로 closure()를 실행할 때 outerVal에 접근가능한 것이다.

이를 활용하면, 객체지향프로그래밍의 private 변수 선언을 할 수 있으며 다음과 같은 이점을 가진다.

  • 접근 권한 제어
  • 지역 변수 보호
  • 데이터 보존 및 활용
function counter(){
	var count = 0;

	return {
		increse : function(){
			count++;
		},
		decrease : function(){
			count--;
		},
		show : function(){
			console.log(count);
		}
	}
}

const closure = counter();

closure.increase();
......

Leave a comment