1. 변수의 생명주기
변수는 선언에 의해 생성되고 할당을 통해 값을 가지며 언젠가는 소멸함.
변수는 자신이 선언된 위치에서 생성되고 소멸함.
변수의 생명주기는 메모리 공간이 확보된 시점부터 메모리 공간이 해제되어 가용 메모리 풀에 반환되는 시점까지를 말함
전역 변수의 생명주기는 애플리케이션의 생명주기와 같음
함수 내부에서 선언된 지역변수는 함수가 호출되면 생성되고 함수가 종료하면 소멸함.
변수 선언은 선언문이 어디에 있든 상관없이 먼저 실행된다 -> 전역변수 한정
함수 내부에서 선언한 변수는 함수 호출 직후에 함수 몸체의 코드가 한줄씩 순차적으로 실행되기 이전에 자바스크립트 엔진에 의해 먼저 실행 -> 지역변수의 생명주기는 함수의 생명 주기와 대부분 일치(지역변수가 오래 남는 경우도 존재 ㅇ)
호이스팅은 스코프 단위로 동작함.
2. 전역 변수의 생명주기
전역 코드는 명시적 호출 없이 실행(특별한 진입점이 없고, 코드가 로드되자마자 해석되고 실행됨), 마지막 문이 실행되어 더이상 실행할 문이 없을때 종료
<-> 함수 : 함수 호출로 실행, 함수 몸체의 마지막 문 또는 반환문이 실행되면 종료
var 키워드로 선언한 전역 변수는 전역 객체 window의 프로퍼티가 됨
* 전역 객체?
코드가 실행되기 이전 단계에서 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체
클라이언트 사이드 : window, 서버 사이드 환경 : global 객체 의미
환경에 따라 전역 객체를 가리키는 다양한 식별자 있었으나, ES11에서 globalThis로 통일
3. 전역 변수의 문제점
1) 암묵적 결합 허용(모든 코드가 참조하고 변경할 수 있음)
2) 긴 생명주기 (<-> 지역변수 : 생명주기가 짧아 상태변경에 의한 오류 발생 확률이 작고, 메모리 리소스도 적음)
3) 검색속도가 느림( 전역 변수는 스코프체인 종점에 존재하므로)
4) 네임 스페이스 오염
4. 전역 변수 사용을 억제하는 방법
1) 즉시 실행 함수 : 모든 코드를 즉시 실행 함수로 감싸면 모든 변수는 즉시 실행 함수의 지역 변수가 됨.
2) 네임 스페이스 객체 : 네임 스페이스 역할 담당 객체 만들고, 전역변수처럼 사용하고 싶은 변수를 프로퍼티로 추가
3) 모듈패턴 : 관련 있는 변수와 함수 모아 즉시 실행 함수로 감싸 하나의 모듈을 만들기.
클로저 기반 동작하고, 전역변수의 억제는 물론 캡슐화까지 구현
4) ES6 모듈 : 파일 자체의 독자적인 모듈 스코프 제공
'스터디 > 모던 자바스크립트 Deep Dive(24.02-24.06)' 카테고리의 다른 글
16장. 프로퍼티 어트리뷰트 (0) | 2024.04.01 |
---|---|
15장. let, const 키워드와 블록 레벨 스코프 (0) | 2024.04.01 |
13장. 스코프 (0) | 2024.04.01 |
12장. 함수 (0) | 2024.04.01 |
11장. 원시 값과 객체의 비교 (0) | 2024.03.19 |