-
[Javascript] 모던자바스크립트 딥 다이브 3일차 (~416p)웹/JavaScript 2023. 1. 23. 19:03
24. 클로저
상위 스코프
함수 객체의 내부 슬롯 [[Environment]]에 저장된 현재 실행 중인 실행 컨텍스트의 렉시컬 환경의 참조를 말한다.
함수 객체는 내부슬롯 [[Environment]]에 저장한 렉시컬 환경의 참조 , 즉 상위 스코프를 자신이 존재한 한 기억한다.
자신이 호출되었을 때 생성될 함수 렉시컬 환경의 "외부 렉시컬 환경에 대한 참조"에 저장될 참조값이다.
클로저
클로저는 자바스크립트 고유의 개념이 아니므로 ECMAScript 명세에 클로저의 정의가 등장하지 않는다. 클로저에 대해 MDN은 아래와 같이 정의하고 있다.
“A closure is the combination of a function and the lexical environment within which that function was declared.”
클로저는 함수와 그 함수가 선언됐을 때의 렉시컬 환경(Lexical environment)과의 조합이다.클로저는 아래 두 가지의 조건을 가지고 있다.
1. 외부 함수 보다 중첩 함수가 오래 유지되는 경우
- 중첩 함수는 이미 생명 주기가 종료한 외부 함수의 변수를 참조할 수 있다.
2. 상위 스코프의 식별자를 참조한다.
클로저의 활용
클로저는 상태를 안전하게 변경하고 유지하기 위해 사용된다.
상태를 완전하게 은닉하고 특정 함수에게만 상태 변경을 허용하기 위해 사용된다.
'웹 > JavaScript' 카테고리의 다른 글
[Javascript] 모던자바스크립트 딥 다이브 5일차 (~613p) (0) 2023.01.26 [Javascript] 모던자바스크립트 딥 다이브 4일차 (~551p) (0) 2023.01.25 [코딩 테스트] 프로그래머스 JS 연습 - 가위바위보, 인덱스 바꾸기, 모스부호(1), 영어가 싫어요, 7의 개수 (0) 2023.01.18 [Javascript] 모던자바스크립트 딥 다이브 2일차 (~358p) (0) 2023.01.17 [Javascript] 모던자바스크립트 딥 다이브 1일차 (~199p) (0) 2023.01.16