진취적 삶
14 전역변수의 문제점 본문
14.1 변수의 생명 주기
14.1.1 지역변수의 생명 주기
변수는 생성되고 할당을 통해 값을 얻고 언젠가 소멸된다. 이처럼 생성 소멸되는 생명주기가 있는데 생명주기가 없다면 영원히 메모리 공간을 점유한다.
지역변수의 생명 주기는 함수의 생명 주기와 일치하다 .
변수의 생명주기는 메모리 공간이 확보된 시점부터 메모리 공간이 해제 되어 가용 메모리 풀에 반환되는 시점까지이다 .
var x = "global";
function foo() {
console.log(x); //undefined
var x = "local";
}
foo();
console.log(x); //global
지역변수 x를 참조하지만 변수 할당문이 실행되기 이전까지는 undefined 값을 가진다.
14.1.2 전역 변수의 생명 주기
전역객체 : 코드가 실행되기 이전에 js 엔진에 의해 어떤 객체보다 먼전 생성되는 특수한 객체
클라이언트 사이드 환경에서는 window 서버 사이드 환경에서는 global 객체를 의미한다.
브라우저 환경에서 var 키워드로 선언한 전역변수는 웹페이지를 닫을때까지 유효하다
전역 객체 window가 웹페이지를 닫을때까지 유효하기 때문이다 .
var 키워드로 선언한 전역 변수의 생명 주기는 전역 객체의 생명 주기와 일치한다 .
14.2 전역변수의 문제점
암묵적 결함
모든 코드가 전역 변수를 참조하고 변경할수 있는 암묵적 결함을 허용한다.
변수의 유효 범위가 클수록 코드의 가독성은 나빠진다 .
긴 생명 주기
전역 변수는 생명 주기가 길다. 따라서 메모리 리소스도 오랜기간 소비한다.
스코프 체인 상에서 종점에 존재
전역변수는 스코프 체인 상에서 종점 이것은 변수를 검색할때 전역 변수가 가장 마지막에
검색된다는것을 말한다. 즉 전역변수의 검색 속도가 가장 느리다
네임스페이스 오염
하나의 파일이 분리되어 있다해도 하나의 전역 스코프를 공유하기에
다른 파일 내에서 동일한 이름으로 명명돤 전역 변수가 같은 스코프내에 존재할경우 예상치 못한 결과 발생
14.3 전역 변수의 사용을 억제하는 방법
전역 변수를 굳이 사용안해도 된다면 지역 변수를 쓰자 , 변수의 스코프는 좁을수록 좋다.
14.3.1 즉시 실행 함수
모든 코드를 즉시 실행 함수로 감싸면 모든 변수는 즉시 실행 함수의 지역 변수가 된다.
14.3.2 네임 스페이스 객체
var MYAPP = {} ;
MYAPP.person = {
name :'lee'
address :'seoul'
};
console.log(MYAPP.person.name) ;
네임 스페이스를 분리해서 식별자 충돌을 방지하는 효과는 있으나
네임 스페이스 객체 자체가 전역 변수에 할당 되므로 그다지 유용하지는 않음
'개발 도서 > 자바스크립트 deepdive' 카테고리의 다른 글
12 함수 (0) | 2023.07.11 |
---|---|
13 스코프 (0) | 2023.07.11 |
15 let,const 키워드와 block level scope (0) | 2023.07.11 |
06 데이터 타입 (0) | 2023.07.11 |
07 연산자 (0) | 2023.07.11 |