第14章.グローバル変数の問題


1.グローバル変数の問題
  • 암묵적 결합有効範囲が広いため、すべてのコードはグローバル変数
  • を参照および変更できます.
    var x = 1;
    
    // ...
    
    // 변수의 중복 선언. 기존 변수에 값을 재할당한다.
    var x = 100;
    console.log(x); // 100
  • 긴 생명 주기メモリリソースに時間がかかる
  • 스코프 체인 상에서 종점에 존재
  • 네임스페이스 오염
  • 2.解決方法
    グローバル変数を使用する必要がある理由が見つからない場合は、領域変数を使用する必要があります.
    変数のスキャンが狭いほど良い
  • 즉시 실행함수すべてのコードが即時実行関数に囲まれている場合、すべての水稲数は即時実行関数の지역 변수になる.
    (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 모듈ES 6モジュール提供ファイル自体の独立モジュールスキャン
  • <script type="module" src="lib.mjs"></script>
    <script type="module" src="app.mjs"></script>