-
Notes from reading 🔖 You Don't Know JS Yet - 4JavaScript 2025. 6. 5. 00:03
## chapter 4
- 함수나 블록 단위로 변수의 스코프를 한정짓는 것은 프로그래밍 언어의 기본
- 스코프 안에는 다른 스코프가 올 수 있고, 해당 스코프에서는 해당 스코프 및 바깥 스코프 레벨의 변수만 접근할 수 있다.
- 안쪽 스코프나 숨겨진 변수는 접근 불가능
- 위와 같은 스코프를 렉시컬 스코프라고 한다 🎶
- JS의 스코프는 특이점이 두 가지 있는데 호이스팅과 var이다.
- var 변수는 블록 위치와 관계 없이 함수 기준으로 스코프가 생성된다.
- var가 아닌 let, const는 TDZ 특징 때문에 특이하게 작동
- 클로저는 JS와 같이 함수를 first class value로 취급하는 언어에서 렉시컬 스코프 모델을 사용했을 때 나타나는 자연스러운 결과물
- 바깥 스코프에 있는 변수를 참조하는 함수가 있는 경우, 이 함수가 변수의 스코프와 다른 곳에서 실행될 때 함수는 함수가 정의된 스코프를 기준으로 바깥 스코프의 변수를 참조한다 -> 클로저
- JS는 클래스를 통해서 사전에 구조를 정의하지 않아도 직접적, 명시적으로 객체를 만들 수 있는 몇 안되는 언어
- 클래스를 만드는 방식은 프로토타입 상속 -> ES6 클래스 등장 이후로는 객체 지향/클래스 스타일로 개발하자는 흐름 생김
- class 문법은 프로토타입을 기반으로하는 하나의 패턴에 불과함. 저자에 따르면, class 이후 프로토타입의 사용이 감소되는 쪽의 방향이 딱히 좋아 보이지는 않는 듯 🫥 (객체 위임이 더 JS 본질에 해당한다고 생각)
- 객체는 그대로 두고 클래스 없이 프로토타입 체인으로 객체가 협력하도록 하는 작동 위임 패턴도 있다.
- JS 커뮤니티는 타입스크립트, flow 같은 정적 타입 방식에 집중하지만, JS에서 타입은 어떻게 동작되는지 간과되는 분위기 💧
- JS 타입 매커니즘의 단점 때문에 TS나 flow를 통해 해결해야 된다 ?? 꼭 그런건 아니다
'JavaScript' 카테고리의 다른 글
Notes from reading 🔖 You Don't Know JS Yet - 6 (0) 2025.06.18 Notes from reading 🔖 You Don't Know JS Yet - 5 (0) 2025.06.11 Notes from reading 🔖 You Don't Know JS Yet - 3 (0) 2025.05.27 Notes from reading 🔖 You Don't Know JS Yet - 2 (0) 2025.05.14 Notes from reading 🔖 You Don't Know JS Yet - 1 (0) 2025.04.16