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가 다시 부활이라도 한 듯이 동작하고 있다. 뭔가 특별한 일이 일어나고 있는 것 같다.
'코드스테이츠' 카테고리의 다른 글
코드스테이츠 html의 또 다른 표현 방식 DOM!! (0) | 2021.08.06 |
---|---|
코드스테이츠 spread & ...args (0) | 2021.08.05 |
코드스테이츠 스코프 (0) | 2021.08.04 |
코드스테이츠 원시타입 || 참조형 타입 이해 (0) | 2021.08.04 |
코드스테이츠 목업 (0) | 2021.08.04 |