본문 바로가기

카테고리 없음

코어자바스크립트:클로저

클로저

에워싸여져 함께 묶여있는 함수,내부함수와 LexicalEnviroment의 조합

클로저는 함수를 실행할 때 무조건 발생되지만, 일반적으로 클로저를 언급할 때는 특별한 현상을 일컫는다. 

말하자면, 컨텍스트 A에서 선언한 변수를 내부함수 B에서 참조할 경우에 나타나는 특별한 현상. 

 

var outer = function () {
	var a = 1; 
    
    var inner = function() {
    	return ++a;
    }
    
	return inner; 
}

var outer2= outer(); 
console.log(outer2()); //2 
console.log(outer2()); //3

 

해당 로직에서 변수 a는 사라져야 하지만, 그렇지 않다. 

왜냐하면 outer2가 inner함수를 담고 있고, 이 inner 함수에서 a를 사용하고 있기 때문에! 

클로저의 특별한 현상이란 '컨텍스트 A에서 선안한 변수 a를 참조하는 내부함수를 외부로 A외부로 전달할 경우, 컨텍스트 A가 종료된 이후에도 a가 내부함수에 의해 참조되고 있어 사라지지 않는 현상'이다.

 

장점: 지역변수는 함수가 종료 된 후에도 사라지지 않게 할 수 있다!  요것을 통해 캡슐화를 할 수 있음!