나 이것도 몰랐네..
자바스크립트 4 - 스코프와 클로저 본문
스코프(Scope)
참조 대상 식별자를 찾아내기 위한 규칙
- 모든 식별자는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위를 결정
- 스코프는 전역 스코프(Global Scope)와 지역 스코프(Local Scope)로 나뉨
구분 | 설명 | 스코프 | 변수 |
전역 | 코드의 가장 바깥 영역 | 전역 스코프 | 전역 변수 |
지역 | 함수 몸체 내부 | 지역 스코프 | 지역 변수 |
- 변수는 자신이 선언된 위치에 의해 자신이 유효한 범위인 스코프가 결정
스코프 체인
스코프가 함수의 중첩에 의해 계층적으로 연결된 것을 의미
- 함수 몸체 내부에서 정의된 함수를 "중첩 함수(nested function)", 중첩 함수를 포함하는 함수를 "외부 함수(outer function)"이라 부름
- 변수를 참조할 때, 스코프 체인을 통해 변수를 참조하는 코드의 스코프에서 시작하여 상위 스코프 방향으로 이동하며 선언된 변수를 검색
렉시컬 환경(Lexical Environment)
- 코드가 어디서 실행되며 주변에 어떤 코드가 있는지를 의미
- 코드의 문맥은 렉시컬 환경에서 이뤄지며, 이를 구현한 것이 실행 컨텍스트(execution context)
- 모든 코드는 실행 컨텍스트에서 평가되고 실행됨
- 상위 스코프에서 유효한 변수는 하위 스코프에서 자유롭게 참조 가능하지만 하위 스코프에서 유효한 변수는 상위 스코프에서 참조할 수 없음
렉시컬 스코프(Lexical Scope)
상위 스코프가 동적으로 변하지 않고, 함수 정의가 평가되는 시점에 상위 스코프가 정적으로 결정되는 것
정적 스코프(Static Scope)라고도 부름
클로저(Closure)
외부 함수보다 중첩 함수가 더 오래 유지되는 경우,이미 생명 주기가 종료된 외부 함수의 변수를 참조할 수 있는 중첩 함수를 의미
- 함수는 자신의 내부 슬롯 [[Environment]]에 자신이 정의된 환경, 상위 스코프의 참조를 저장
- 함수 객체는 내부 슬롯 [[Environment]]에 저장된 렉시컬 환경의 참조를 자신이 존재하는 한 기억함
- 외부 함수가 종료되어도 내부 슬롯 [[Environment]]에 저장된 렉시컬 환경의 참조를 통해 접근
클로저의 활용
- 상태를 안전하게 변경하고 유지하기 위해 사용
- 모듈 내부 로직의 노출을 최소화하여 정보를 은닉
- 변수에 대한 접근 권한을 제어할 수 있음
- 부분 적용 함수
- n개의 인자를 받을 함수에 미리 m개의 인자를 넘긴 후, 나중에 나머지 인자를 넘겨 원래 함수 실행 결과를 얻는 것
- 커링
- 단일 호출로 처리하는 함수를 각각의 인자가 호출 가능한 프로세스로 호출된 후 병합되도록 변환하는 것
- 주로 지연 실행에 사용됨
'언어 > 자바스크립트' 카테고리의 다른 글
Baekjoon 문제 자바스크립트로 풀기 (1) | 2024.05.02 |
---|---|
자바스크립트 5 - 이벤트 (0) | 2024.04.15 |
자바스크립트 3 - 데이터 타입 및 복사 (0) | 2024.03.29 |
자바스크립트 2 - 변수 (0) | 2024.03.29 |
자바스크립트 1 - 동기/비동기 (0) | 2024.03.28 |