1. 스코프1-1. let, var, const와 스코프
2. 클로저
2-1. 클로저의 활용
1. 스코프
스코프란 변수 접근 규칙에 따른 유효 범위를 말한다.
함수 또는 블록에 의해서 나뉘어진 범위에 울타리를 치는 것과 같다.
스코프에서 핵심이 되는 규칙은
안쪽 스코프는 바깥쪽 스코프에서 선언된 변수에 접근할 수 있지만
바깥쪽 스코프는 안쪽 스코프에서 선언된 변수에 접근할 수 없다는 것이다.
가장 바깥의 스코프는 전역 스코프(global scope)라고 불린다.
이와 구별되는 개념은 지역 스코프(local scope)로, 전역 스코프가 아닌 스코프는 모두 지역 스코프다.
지역 스코프에서 선언된 지역 변수는 전역 스코프에서 선언된 전역 변수보다 높은 우선순위를 가진다.
즉, 같은 이름으로 선언된 변수라면 지역 스코프에서는 지역 변수를 먼저 따른다.
1-1. let, var, const와 스코프
이 세 키워드의 공통점과 차이점에 관해서는 변수 선언에 관해 정리할 때 정리한 적이 있다.
[Javascript] 데이터 타입과 변수
1. 데이터 타입 1-1. 숫자(number) 타입 1-2. 문자열(string) 타입 1-3. 불리언(Boolean) 타입 1-4. 기타 2. 변수 2-1. 변수 선언과 할당 2-2. 변수 호이스팅 1. 데이터 타입 자바스크립트의 모든 값은 데이터 타입
sulki.tistory.com
핵심은 var는 함수 레벨 스코프, let, const는 블록 레벨 스코프를 지원한다는 것이다.
또한 let은 var와 달리 재선언이 불가능하기 때문에
실수를 줄이고 예측 가능한 코드 작성을 위해서는 let 키워드를 사용하는 것이 더 안전하다.
2. 클로저
클로저는 함수와 그 함수가 선언된 렉시컬 환경과의 조합이다.
클로저를 이해하는 데 가장 첫번째 난관이 되는 것은 이 정의 자체가 아닐까..?
그래서 클로저라는 말을 함수를 가리킬 때 쓰는 것인지, 이 원리를 가리킬 때 쓰는 것인지
즉, 실체가 있는 뭔가를 가리킬 때 쓰는지 아니면 추상적인 개념인지를 이해하는 데 많은 시간이 들었다.
여러 참고 도서와 블로그를 뒤져 가며 얻은 답은 '둘 다'라는 것이다.
클로저는 특정 형태의 함수를 지칭할 수 있고, 또 그 함수와 함수가 선언된 환경과의 관계를 가리킬 때도 쓸 수 있다.
그럼 클로저인 함수는 어떤 함수인가?
자바스크립트에서 이론적으로 모든 함수는 클로저다.
그러나 일반적으로 클로저라고 할 때는 모든 함수를 가리키지는 않고, 다음과 두 조건을 모두 만족시키는 경우만을 말한다.
1️⃣ 외부 함수의 지역 변수를 참조하는 내부 함수가 있어야 한다.
2️⃣ 내부 함수가 외부 함수의 바깥에 전달돼 외부 함수보다 더 오래 생존해야 한다.
2-1. 클로저의 활용
그렇다면 클로저를 어떨 때 사용하는가?
전역 변수는 어디서나 접근할 수 있고 변경할 수 있다.
클로저를 활용하면 안전하게 관리돼야 하는 값을 은닉해서 변수의 의도치 않은 변경을 방지할 수 있다.
더 공부해 보면 좋을 것
- 클로저 함수 실제로 구현해 보기
- 실행 컨텍스트에 관해서 공부하기
'Javascript' 카테고리의 다른 글
[Javascript] DOM (0) | 2023.03.07 |
---|---|
[Javascript] 구조 분해 할당 (0) | 2023.03.06 |
[Javascript] 원시 자료형과 참조 자료형 (0) | 2023.03.02 |
[Javascript] 객체 (0) | 2023.02.28 |
[Javascript] 배열 (1) | 2023.02.27 |