암묵적 결합
var x = 1;
// ...
// 변수의 중복 선언. 기존 변수에 값을 재할당한다.
var x = 100;
console.log(x); // 100
긴 생명 주기
메모리 리소스를 오랜시간 소요한다
스코프 체인 상에서 종점에 존재
네임스페이스 오염
전역 변수를 반드시 사용해야 할 이유를 찾지 못하면, 지역 변수를 사용해야 한다.
변수의 스코프는 좁을 수록 좋다
즉시 실행함수
지역 변수
가 된다(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(Counter.increase()); // 1
console.log(Counter.increase()); // 2
console.log(Counter.decrease()); // 1
console.log(Counter.decrease()); // 0
ES6 모듈
<script type="module" src="lib.mjs"></script>
<script type="module" src="app.mjs"></script>