본문 바로가기

코드스테이츠

코드스테이츠 closure 사용 && 캡슐화의 이해

 

Clousure는 왜 나왔을까? 음... 운영체제의 관점에서 이것을 공부해보자 

 

function이 만들어지면 이는 stack 에 들어가게 되는데 여기서 계산이 완료되면 이 함수의 선언한 변수에 할당된 값들은 계산 후  사라지게 된다.   그래서 내부함수에 그 값을 넣어 외부함수에서 호출 할 때 외부 함수의 변수의 값을 계속 저장할 수 있게 한다.

예를 들어

x+y라는 함수를 만들어 보자

 

 

 

function outerFunc()

{ var x = 10;

var innerFunc = function () { console.log(x); };

return innerFunc() ; }

var inner = outerFunc();

inner(); // 10

함수 outerFunc는 내부함수 innerFunc를 반환하고 생을 마감했다. 즉, 함수 outerFunc는 실행된 이후 콜스택(실행 컨텍스트 스택)에서 제거되었으므로 함수 outerFunc의 변수 x 또한 더이상 유효하지 않게 되어 변수 x에 접근할 수 있는 방법은 달리 없어 보인다. 그러나 위 코드의 실행 결과는 변수 x의 값인 10이다. 이미 life-cycle이 종료되어 실행 컨텍스트 스택에서 제거된 함수 outerFunc의 지역변수 x가 다시 부활이라도 한 듯이 동작하고 있다. 뭔가 특별한 일이 일어나고 있는 것 같다.