FRONT/JAVASCRIPT

[javascript] 전역 변수의 문제점

연듀 2021. 6. 20. 13:50

 

 

변수의 생명 주기

 

지역 변수의 생명 주기

 

함수 내부에서 선언된 지역 변수는 함수가 호출되면 생성되고 함수가 종료하면 소멸한다.

즉, 지역 변수의 생명 주기는 함수의 생명 주기와 일치한다.

 

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

호이스팅은 스코프 단위로 동작하며, 지역 변수의 호이스팅은 변수의 선언이 전역 스코프의 선두로 끌어 올려진것 처럼 동작한다.

 

 

전역 변수의 생명 주기

 

var 키워드로 선언한 전역 변수의 생명 주기는 전역 객체의 생성 주기와 일치한다.

(전역 객체란 코드가 실행되기 전에 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성된는 객체다. ex)window, global)

 

브라우저 환경에서 전역 변수는 웹페이지를 닫을 때까지 유효하다.

 

 

 

 

 

전역 변수의 문제점

 

  • 모든 코드가 전역 변수를 참조하고 변경할 수 있는 암묵적 결합을 허용한다.
  • 생명 주기가 길어 메모리 리소스를 오래 소비하고, 변수 상태가 변경되고 이름이 중복될 가능성이 있다.
  • 스코프 체인 상에서 종점에 존재한다. -> 전역 변수의 검색 속도가 가장 느리다.
  • 네임 스페이스의 오염 - 파일이 분리되어 있어도 하나의 전역 스코프를 공유한다.

 

 

 

 

 

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

 

  • 즉시 실행 함수
    모든 코드를 즉시 실행 함수로 감싸면 모든 변수는 즉시 실행 함수의 지역 변수가 된다.
  • 네임 스페이스 객체
    전역에 네임 스페이스 객체를 생성하고 전역 변수처럼 사용하고 싶은 변수를 프로퍼티로 추가한다.
  • 모듈 패턴
    클래스를 모방해서 관련이 있는 변수나 함수를 모아 즉시 실행 함수로 감싸 하나의 모듈로 만든다.
  • ES6 모듈
    전역 변수를 사용하지 않는다.