변수의 생명 주기

전역 변수의 문제점

  1. 긴 생명 주기
  2. 암묵적 결합
  3. 스코프 체인 상에서 종점에 존재
  4. 네임스페이스 오염

전역 변수의 사용 억제하는 방법

  1. 즉시 실행 함수

    (function () {
    	var foo = 10;
    }());
    
    console.log(foo); // ReferenceError
    
  2. 네임스페이스 객체

    var MYAPP = {};
    
    MYAPP.name = 'leeeunji';
    MYAPP.person = {
    	name: 'leeeunji',
    	country: 'korea'
    }
    
    console.log(MYAPP.name); // leeeunji
    console.log(MYAPP.person.country); // korea
    
  3. 모듈 패턴

    var Counter = (function () {
    	var num = 0; // private 변수
    	return {
    		increase() {
    			return ++num;
    		},
    		decrease() {
    			return --num;
    		}
    	};
    }());
    
    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
    
  4. ES6 모듈

    <script type="module" src="lib.mjs"></script>
    
    export default MyComponent;
    
    // 다른 파일에서
    import MyComponent from '/myComponent'