14장 변수의 생명 주기

전역 변수의 무분별한 사용은 위험하다. 사용해야할 이유가 없다면 지역 변수를 쓰자!

14.1 변수의 생명 주기

변수는 생명 주기가 있다. 없으면 메모리 공간을 영원히 차지하게 된다. 지역 변수는 해당 함수가 호출 되기 전까지는 생성되지 않는다. 호출하지 않으면 변수 선언문이 실행되지 않기 때문이다. 변수 선언은 선언문이 어디에 있든 가장 먼저 실행된다. 런타임 이전 단계인 자바스크립트 엔진에 의해 먼저 실행되기 때문이다.

함수가 호출되어 실행되는 동안에만 유효하므로 지역 변수의 생명 주기는 함수의 생명 주기와 일치한다!

호이스팅은 스코프를 단위로 동작한다. 호이스팅은 변수 선언이 스코프의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트의 고유의 특징이다.

14.1.2 전역 벼수의 생명 주기

var 키워드로 선언한 전역 변수는 전역 개체의 프로퍼티가 된다. 이는 전역 변수의 생명주기가 전역 객체의 생명 주기와 일치한다는 것을 말한다.

전역 객체란? 

코드가 실행되기 이전 단계에 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체다.

ex) winodw (브라우저) , global ( Node.js)

14.2 전역 변수의 문제점

  1. 암묵적 결합
    • 모든 코드가 전역 변수를 참조하고 변경할 수 있는 것
  2. 긴 생명 주기
    • 메모리 리소스 시간도 오래 소비하고 의도치 않은 재할당이 이뤄질 수 있음.
  3. 스코프 체인 상에서 종점에 존재
    • 전역 변수의 검색 속도가 가장 느림
  4. 네임스페이스 오염
    • 파일이 분리 되어있어도 이름이 겹치면 재할당이 될수가 있다.

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

되도록 지역 변수를 사용해야하고 변수의 스코프는 좁을 수록 좋다.

즉시 실행함수를 사용하거나 네임스페이스 객체로 사용하기도 한다. 네임 스페이스란? 객체를 생성 후 전역 변수처럼 사용하고 싶은 변수를 프로퍼티로 추가하는 방법이다.


var MYAPP = {};

MYAPP.name = 'Lee';