본문 바로가기
Java script

JavaScript_자바스크립트 클로저

by 디디찐 2022. 9. 21.
반응형

1. 클로저의 개념


참고: https://poiemaweb.com/js-closure
lexical scoping : 변수가 어디에서 사용 가능한지 알기 위해 그 변수가 소스코드 내 어디에서 선언되었는지 고려한다는 것을 의미
중첩된 함수는 외부 범위(scope)에서 선언한 변수에도 접근할 수 있다.

자신을 포함하고 있는 외부함수보다 내부함수가 더 오래 유지되는 경우, 외부 함수 밖에서 내부함수가 호출되더라도 외부함수의 지역변수에 접근할 수 있다.
클로저는 반환된 내부함수가 자신이 선언됐을 때의 환경(Lexical environment)인 스코프를 기억하여 자신이 선언됐을 때의 환경(스코프) 밖에서 호출되어도 그 환경(스코프) 내에 접근할 수 있는 함수

let과 const를 사용한 범위 지정 *
시간상 사각지대: 코드의 실행 순서에 의해 형성 초기화 하기 전에는 읽거나 쓸 수 없음


2.클로저의 활용 


클로저가 가장 유용하게 사용되는 상황은 현재상태를 기억하고 변경된 최신 상태를 유지하는 것
 // 함수 innerFunc가 함수 outerFunc의 내부에 선언된 내부함수이므로 함수 innerFunc는 자신이 속한 렉시컬 스코프(전역, 함수 outerFunc, 자신의 스코프)를 참조
 // 내부함수가 자신을 포함하고 있는 외부함수의 변수에 접근할 수 있는 것 => 렉시컬 스코핑 스코프 체인의 검색에 의해


3. 모듈 패턴

 



4. 클로저 스코프 체인


모든 클로저에는 세가지 스코프{범위}가 있다.

지역 범위(Local Scope, Own scope)
외부 함수 범위(Outer Function Scope)
전역 범위(Global Scope)



반응형