✔️ 복습
실행 컨텍스트:
자바스크립트 코드가 실행되기 위해서 필요한 환경을 제공하는 객체(Object)
레코드(Record)와 아우터(Outer)로 구성
레코드는 환경 레코드를 말하며, 자바스크립트 코드의 선언문을 기록해두는 공간을 가리키는 객체
환경 레코드:
내부적으로 생성 단계와 실행 단계라는 두 가지 단계를 거쳐서 실행
생성 단계에서는 현재 컨텍스트의 선언문을 환경 레코드에 기록
실행 단계는 생성 단계에서 기록된 환경 레코드를 참조해서 코드를 실행하거나 업데이트
렉시컬 스코프(정적 스코프):
함수를 어디서 호출하는지가 아니라 어디에 선언하였는지에 따라 결정되는 것
함수를 어디서 선언하였는지에 따라 상위 스코프를 결정
함수의 호출이 아니라 함수의 선언에 따라 결정
하나의 실행 컨텍스트에서 환경 레코드와 아우터를 하나로 묶어서 렉시컬 스코프
아우터(Outer):
바깥 렉시컬 스코프를 참조하는 객체
아우터를 통해서 외부에 있는 식별자를 참조 가능
아우터에 의해서 바깥 렉시컬 스코프를 참조할 수 있는 현상을 스코프 체인
참조해 나가는 것을 스코프 체이닝
💫
https://f-lab.kr/insight/understanding-closures-and-garbage-collection-in-javascript-20240605
1.1 메모리에서 더 이상 사용되지 않는 객체를 자동으로 감지하고, 해당 메모리를 회수하여 메모리에서 삭제해주는 시스템
2.2 가비지 컬렉션을 자동으로 수행한다. 왜? 실행컨텍스트가 콜스택에서 제거가 될 때
2.3 자동으로 수행이 되지 않는 경우 -> 그 컨텍스트의 레코드 값이 참조 중일 때
4.1 내부 함수에서 외부 변수를 참조하면서 반환되는 경우
4.2 자유 변수를 참조하는 내부 함수를 반환하는 것
4.3 가비지 콜렉션의 대상이 되지 못 하고 메모리 제거가 되지 못 해서 메모리에 남아있는 현상 -> 클로저
클로저 사용할 일 거의 없음
5.1 클로저는 위험해요 -> 메모리가 자동으로 삭제된다는 것
5.3 클로저가 많으면 ? -> 회수되자 메모리 많아진다는 것 -> 자바스크립트와 가비지콜렉터 시스템을 위협하는 행위
5.3 내부함수에서 자유 변수를 가리키고 있는 함수를 의미
5.4 -> 주로 캡슐화가 필요한 로직에 사용
클로저 사용 패턴
6.1 캡슐화 -> 은닉화
6.2 함수 팩토리(특정 기능을 하는 함수를 고정할 떄)
비동기 프로그램
동기? 비동기?
동기 언어 -> 특정 코드가 실행되는 것을 기다려줌
비동기적으로 코드를 실행할 수 있게 해줌
💫
https://1yoouoo.tistory.com/28
https://f-lab.kr/insight/javascript-closure-and-memoization