14장. 전역 변수의 문제점

Happhee·2022년 1월 21일
0

JS : Depp Dive

목록 보기
11/35
post-thumbnail

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 모듈
    ES6 모듈은 파일 자체의 독자적인 모듈 스코프를 제공한다
<script type="module" src="lib.mjs"></script>
<script type="module" src="app.mjs"></script>
profile
즐기면서 정확하게 나아가는 웹프론트엔드 개발자 https://happhee-dev.tistory.com/ 로 이전하였습니다

0개의 댓글