14장 전역 변수의 문제점

박찬미·2023년 12월 17일
0

전역 변수의 무분별한 사용은 위험하다

14.1 변수의 생명 주기

14.1.1 지역 변수의 생명 주기
변수는 생명, 소멸되는 생명주기를 가진다.
-"자신이 선언된 위치"에서 생성 , 소멸되는데 따라서 전역변수는 애플리케이션 생명주기를 갖고 지역 변수는 함수 생명 주기를 가진다.

function foo(){
 var x = 'local';
 console.log(x); //local
 return x;
}

foo();
console.log(x); //error~~~
//지역 변수 x는 foo함수가 호출되기 이전까지는 생성되지 않는다.

단, 지역 변수의 경우 해당 함수 스코프가 어딘가에서 계속 참조 중이라면 사라지지 않는다.
-호이스팅이란 변수 선언이 스코프의 선두에 이루어지는 것을 뜻하며, 자바스크립트 엔진에 의해 전역변수는 실행 전 제일먼저, 지역 변수는 함수 내부에서 제일 먼저 선언이 이루어진다.

var x = 'global';
function foo(){
    console.log(x); //undefined -호이스팅에 의해 변수의 선언만 이루어진 상태
    var x = 'local';
}
foo();
console.log(x);//global

-특히 전역 변수는 var 키워드로 선언된 경우, 전역 객체의 프로퍼티가 되어 전역 객체의 생명 주기를 가지게 된다.
-전역 객체란 코드 실행 전 자바스크립트 엔진에 의해 가장 먼저 생성되는 특수한 객체로, 클라이언트 사이드 환경(브라우저)에서는 윈도우, 서버 사이드환경(node.js)에서는 global 객체를 의미한다.

14.2 전역 변수의 문제점

암묵적 결합 허용
전역변수는 어디서드 참조, 할당할수있기때문에 암묵적결합을 허용하는 것이며 변수의 유효범위가 커질수록 코드의 가독성은 나빠지고 의도치않게 상태가 변경될수있는 위험도가 증가한다.
긴 생명주기
메모리 소비도 높으며 var 키워드는 중복선언을 허용하므로 의도치 않은 재할당이 일어날 수 있다.
스코프 체인 상에서 종점에 존재
종점에 존재하기에 전역변수의 검색 속도가 가장 느리다.
네임스페이스 오염
다른파일내에서 동일한 이름으로 명명된 전역변수나 전역함수가 같은 스코프내에 존재하는 경우 예쌍치 못하는 결과를 가져올 수 있음

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

즉시 실행 함수
모든 코드를 즉시 실행 함수로 감싸면 모든 변수는 즉시 실행 함수의 지역 변수가 된다.

(function(){
 var foo = 10; //즉시 실행 함수의 지역 변수
}())

네임스페이스 객체

전역에 네임스페이스 역할을 담당할 객체를 생성하고 전역 변수처럼 사용하고 싶은 변수를 프로퍼티로 추가하는 방법이다.

var MYAPP ={}; //전역 네임스페이스 객체

MYAPP.name = 'lee';

console.log(MYAPP.name); //lee

모듈 패턴
js의 클로저 기반으로 동작 캡슐화까지 구현가능하다.

ES6모듈
ES6 모듈은 파일 자체의 독자적인 모듈 스코프를 제공한다.

profile
우당탕탕

0개의 댓글