* 아래 내용은 이웅모 저자님의 모던 자바스크립트 Deep Dive 책(위키북스)을 정리한 내용입니다.
저작권에 문제가 된다면 삭제하도록 하겠습니다.
14.1 변수의 생명주기
지역 변수의 경우 함수가 호출될 때 생성되고, 함수가 끝나면 없어진다. 즉, 지역 변수의 생명 주기는 함수의 생명 주기와 일치한다.(가끔 예외도 있다.)
* 지역 변수의 경우 함수가 호출될 때 호이스팅 된다.
전역 변수의 경우 전역 객체의 생명 주기와 일치한다.(즉, 코드가 시작할때 부터 끝날 때 까지 살아있다.)
14.2 전역 변수의 문제점
⓵ 모든 코드가 전역변수를 참조하고 변경할 수 있는 암묵적 결합(implicit coupling)을 허용한다. 변수의 유효 범위가 클수록 코드의 가독성은 나빠지고 의도치 않게 상태가 변경될 수 있는 위험성은 높아진다.
⓶ 생명 주기가 길어서 메모리 리소스도 오랜기간 소비한다.
⓷ 스코프 체인상 종점에 존재하기 때문에 검색 속도가 느리다.
⓸ 파일이 분리되어 있더라도 전역스코프는 공유하기 때문에 다른파일 내에서 같은 이름으로 선언된 변수가 있으면 예상치 못한 결과를 가져올 수 있다.
14.3 전역변수의 사용을 억제하는 방법
⓵ 즉시 실행 함수 : 모든 코드를 즉시 실행 함수로 감싸면 모든 변수는 즉시 실행 함수의 지역변수가 된다.
(function () {
var foo = 10; // 즉시 실행 함수의 지역 변수
// ...
}());
console.log(foo); // ReferenceError: foo is not defined
* 라이브러리등에 자주 사용된다.
⓶ 네임 스페이스 객체
var MYAPP = {}; // 전역 네임스페이스 객체
MYAPP.name = 'Lee';
console.log(MYAPP.name); // Lee
* 요즘안 잘 안쓰인다.
⓷ 모듈 패턴
var Counter = (function () {
// private 변수
var num = 0;
// 외부로 공개할 데이터나 메서드를 프로퍼티로 추가한 객체를 반환한다.
return {
increase() {
return ++num;
},
decrease() {
return --num;
}
};
}());
// private 변수는 외부로 노출되지 않는다.
console.log(Counter.num); // undefined
* 클로저를 기반으로 동작한다. 자세한 설명은 24장 클로저 참조
⓸ ES6 모듈
ES6 모듈은 파일 자체의 독자적인 모듈 스코프를 제공한다.(48장, 49장 참조)
Reference
- 이웅모 , 모던 자바스크립트 Deep Dive , 위키북스 , 2020
'개인공부 > 모던 자바스크립트 Deep Dive' 카테고리의 다른 글
16장 프로퍼티 어트리뷰트 (0) | 2022.12.31 |
---|---|
15장 let, const키워드와 블록레벨 스코프 (0) | 2022.12.28 |
13장 스코프 (0) | 2022.12.26 |
12. 함수 (0) | 2022.12.26 |
11장은 내맘대로 개념정리로 대체 (0) | 2022.12.25 |
댓글