변수의 생명주기
- 변수는 호이스팅에 의해 가장 먼저 실행된다
- 전역 변수가 아닌 지역 변수일 경우, 함수가 실행된 직후 먼저 실행이 된다.
- 즉 지역 변수의 생명 주기는 함수의 생명 주기와 같다.
- 하지만 지역 변수가 함수보다 오래 생존하는 경우도 있다.
- 변수의 생명 주기는 메모리 공간의 확보 > 메모리 공간이 해체 > 가용 메모리 풀에 반환 되는 시점을 말한다.
- 따라서 변수는 자신이 등록된 스코프가 소멸(메모리 해체)될 때 까지 유효하다. 할당된 메모리 공간은 더 이상 그 누구도 참조하지 않을 때 가비지 콜렉터에 의해 해체> 가용 메모리 풀에 반환된다.
- 아래의 내용을 이해하자.
- var x = 'global' function foo(){ console.log(x); var x = 'local' } foo(); //undefined console.log(x)//global
- 전역 변수는 전역 객체 (브라우저는 window)의 생명주기와 일치한다.
전역 변수의 문제점
- 암묵적 결합
- 변수의 유효 범위가 클수록 가독성이 떨어지고 의도치 않게 변수 상태를 변경할 수 있는 위험이 있다
- 긴 생명주기
- 전역 변수는 생명 주기가 길다. 따라서 메모리 리소스도 오랜 기간 소비한다.
- 지역 변수는 메모리 리소스도 짧은 기간만 소비한다.
- 스코프 체인 상에서 종점에 존재.
- 전역 변수의 검색 속도가 가장 느리다.
- 네임 스페이스 오염
- 하나의 전역 스코프를 공유한다면 다른 파일 내 동일한 이름으로 명명된 변수에 따라 예상치 못한 결과를 초래할 수 있다.
전역 변수의 사용을 억제하는 방법
- 즉시 실행 함수
- 함수 정의와 동시에 실행되는 즉시실행 함수는 단 한 번만 호출된다.
- 코드를 직시 실행 함수로 감싸면 변수는 즉시 실행 함수의 지역 변수가 된다.
- 네임스페이스 객체
- 전역에 네임스페이스 역할을 할 객체를 생성하고 전역 변수처럼 사용하고 싶은 변수를 추가해서 사용
b. 객체 자체가 전역에 있기 때문에 그다지 유용하진 않음.var MYAPP = {}; MYAPP.name = 'Lee'; console.log(MYAPP.name);
- 모듈 패턴 p.207
- 모듈 패턴은 클래스를 모방하여 변수와 함수를 모아 즉시 실행 함수로 감싸 하나의 모듈로 만드는 것.
- 모듈 패턴은 JS의 클로저를 기반으로 동작.
- 캡슐화 까지 구현 가능.
- ES6 모듈패턴
- <script type=’module’ src=”index.mjs”></script>
- 지원하지 않을 수도 있기 때문에 Webpack 등의 모듈 번들러를 사용하는 것이 일반적
'기술 서적 > 하루 30분 모딥다' 카테고리의 다른 글
하루 30분 모던 자바스크립트 딥 다이브. 프로퍼티 어트리뷰트 (0) | 2023.06.19 |
---|---|
하루 30분 모던 자바스크립트 딥 다이브. let, const 키워드 (0) | 2023.06.16 |
하루 30분 모던 자바스크립트 딥 다이브. 스코프 (0) | 2023.06.08 |
하루 30분 모던 자바스크립트 딥 다이브. 함수 (0) | 2023.06.03 |
하루 30분 모딥다. 어트리뷰트 (0) | 2023.06.01 |