728x90
클로저란?
함수와 그 함수가 선언됐을 때의 렉시컬 환경과의 조합이다.
클로저는 함수를 지칭! + 함수가 선언된 환경과의 개념의 합성어이다.
무슨 말인지 이해가 되지 않았다.
코드로 이해해보자!
function outerFunc() {
var x = 10;
var innerFunc = function () { console.log(x); };
innerFunc();
}
outerFunc(); // 10
함수 outerFunc 내에서 내부 함수인 innerFunc가 선언되고 호출되었다.
내부함수 innerFunc는 자신을 포함하는 외부함수인 outerFunc의 변수 x에 접근하여 x값이 10으로 출력이 되었다.
스코프는 함수를 호출할 때가 아닌, 함수를 어디에 선언하였는지에 따라 결정된다.
내부함수 innerFunc가 호츨되면 자신의 실행 컨텍스트가 실행 컨텍스트 스택에 쌓이고 변수 객체와 스코프 체인 그리고 this에 바인딩할 객체가 결정된다.
이때 스코프 체인은 전역 스코프를 가리키는 전역 객체와 함수 outerFunc의 스코프를 가리키는 함수 outerFunc의 활성 객체 그리고 함수 자신의 스코프를 가리키는 활성 객체를 순차적으로 바인딩한다.
다시 말해서, 클로저란?
위 정의에서 말하는 함수란 반환된 내부함수를 의미하고, 그 함수가 선언될 때의 렉시컬 환경이란 내부 함수가 선언됐을 때의 스코프를 의미한다.
즉, 클로저는 반환된 내부함수가 자신이 선언됐을 때의 환경인 스코프를 기억하여 자신이 선언됐을때의 환경 밖에서 호출되어도 그 환경에 접근할 수 있는 함수를 말한다.
클로저는 자신이 생성될 때의 환경을 기억하는 함수이다.
728x90