전역 변수의 무분별한 사용은 위험하다.
전역 변수를 반드시 사용해야 할 이유를 찾지 못한다면 지역 변수를 사용해야 한다.
이번 장에서는 전역 변수의 문제점과 전역 변수의 사용을 억제할 수 있는 방법을 살펴보자.
생명 주기(life cycle): 변수는 생물과 유사하게 생성되고 소멸되는 생명 주기가 있다.
할당된 메모리 공간은 더 이상 그 누구도 참조하지 않을 때 가비지 콜렉터에 의해 해체되어 가용 메모리 풀에 반환된다. ... 이는 스코프도 마찬가지다.
전역 변수의 문제점
전역 변수의 사용을 억제하는 방법
(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
console.log(Coutner.increase()); // 1
console.log(Coutner.increase()); // 2
console.log(Coutner.decrease()); // 1
console.log(Coutner.decrease()); // 0
<script type="module" scr="lib.mjs"></script>
<script type="module" scr="app.mjs"></script>
네임스페이스(namespace):
이름공간 또는 네임스페이스(영어: namespace)는 개체를 구분할 수 있는 범위를 나타내는 말로 일반적으로 하나의 이름 공간에서는 하나의 이름이 단 하나의 개체만을 가리키게 된다.
캡슐화(encapsulation): 객체의 상태를 나타내는 프로퍼티와 프로퍼티를 참조하고 조작할 수 있는 동작 매서드를 하나로 묶는 것을 말한다.