MDN 클로저
- 클로저는 주변 상태(어휘적 환경,렉시컬 환경(Lexical Enivronment))에 대한 참조와 함께 묶인(포함된) 함수의 조합
- 클로저는 내부 함수에서 외부 함수의 범위에 대한 접근을 제공합니다
- 클로저는 자신이 생성될 때의 환경(Lexical environment)을 기억하는 함수
스코프 범위
스코프는 해당 함수를 실행시키는 환경을 의미하며, 스코프는 함수를 호출할 때가 아니라 함수를 어디에 선언하였는지에 따라 결정됩니다. 이를 결정하는 것을 렉시컬 스코핑(Lexical Scoping)이라고합니다.
function outerFunction () {
var x = 10;
var innerFunc = function () { console.log(x); };
innerFunc();
}
outerFunc(); // 10
- outerFunc 함수가 실행되어 내부함수 innerFunc가 호출되면 자신의 실행 컨텍스트가 실행 컨텍스트 스택에 쌓이고 변수 객체(Variable Object)와 스코프 체인(Scope chain) 그리고 this에 바인딩할 객체가 결정됩니다.
- 이때 스코프 체인은 전역 스코프를 가리키는 전역 객체와 함수 outerFunc의 스코프를 가리키는 함수 outerFunc의 활성 객체(Activation object) 그리고 함수 자신의 스코프를 가리키는 활성 객체를 순차적으로 바인딩합니다.
- 스코프 체인이 바인딩한 객체가 바로 렉시컬 스코프입니다.
- 내부함수 innerFunc가 자신을 포함하고 있는 외부함수 outerFunc의 변수 x에 접근할 수 있는 것, 다시 말해 상위 스코프에 접근할 수 있는 것은 렉시컬 스코프의 레퍼런스를 차례대로 저장
- 클로저는 반환된 내부함수가 자신이 선언됐을 때의 환경(Lexical environment)인 스코프를 기억하여 자신이 선언됐을 때의 환경(스코프) 밖에서 호출되어도 그 환경(스코프)에 접근할 수 있는 함수
'Computer Science' 카테고리의 다른 글
Mysql 풀텍스트인덱스(Full-Text Index) (0) | 2024.05.08 |
---|---|
코루틴(Coroutine) (0) | 2024.04.24 |
순수함수(Pure Function) (0) | 2024.04.10 |
코틀린(Kotlin) (0) | 2024.04.07 |
병렬처리(Parallel Processing) (0) | 2023.04.06 |