Modern JavaScript Deep Dive 스터디 - CH14 전역 변수의 문제점
참고 자료: ⟪모던 자바스크립트 Deep Dive⟫"(이웅모 지음,위키북스, 2020)
var
키워드로 선언한 전역 변수는 전역 객체의 생명 주기와 일치전역 객체(global object)
- 코드 실행 전 단계에서 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체
- 브라우저(클라이언트 사이드)에서는
window
, Node.js(서버 사이드 환경) 에서는global
객체가 해당
(function () {
var foo = 10; // 즉시 실행 함수의 지역 변수
// ...
}());
console.log(foo); // ReferenceError: foo is not defined
var MYAPP = {}; // 전역 네임스페이스 객체
MYAPP.name = 'Lee';
console.log(MYAPP.name); // Lee
MYAPP.person = {
name: "Boo",
age: "25",
};
console.log(MYAPP.person.name); // Boo
var Counter = (function () {
// private 변수 -> 외부에서 참조 불가
var num = 0;
// public 변수 -> 외부에서 참조 가능
// 외부로 공개할 데이터나 메서드를 프로퍼티로 추가한 객체를 반환
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
script태그
에 type="module"
어트리뷰트 추가해서 사용mjs
를 권장<script type="module" src="lib.mjs"></script>
<script type="module" src="app.mjs"></script>
ES6 모듈
- IE를 포함한 구형 브라우저에서는 동작 안함
- Webpack 등의 모듈 번들러를 일반적으로 사용(트랜스파일링이나 번들링이 필요)