14 / 전역 변수의 문제점

JinKris·2022년 2월 2일
0

DeepDive Modern Javascript

목록 보기
10/17
post-thumbnail

전역 변수 사용은 위험하다... 지역 변수를 사용하는 것을 권장한다!
이번장은 전역 변수 사용에 따른 문제점과 억제방법을 다룬다.

변수의 생명 주기

변수는 선언에 의해 생성되고 할당을 통해 값을 갖는다 그리고 언젠가 소멸하는데...(생명 주기life-cycle가 있다).

지역 변수의 생명 주기

변수는 자신이 선언된 위치에서 생성되고 소멸한다.
함수 내부에서 선언된 지역 변수는 함수가 호출되면 생성되고 함수가 종료하면 소멸한다.즉, 지역 변수의 생명 주기는 함수의 생명 주기와 일치한다.

지역 변수는 함수가 생성한 스코프에 등록되고 스코프는 렉시컬 환경이라 부르는 물리적인 실체가 있다. 따라서 변수는 자신이 등록된 스코프가 소멸(메모리 해제)될 때까지 유효하다_(일반적으로 함수가 종료하면 함수가 생성한 스코프도 소멸하지만 누군가 스코프를 참조하고 있으면 스코프는 소멸하지 않는다=클로저)

호이스팅은 스코프 단위로 동작한다

var x = 'global';

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

전역 변수의 생명 주기
함수와 달리 전역 코드는 명시적인 호출 없이 실행된다 즉 코드가 로드되자마자 곧바로 해석되고 실행된다. 전역코드는 마지막 문이 실행되어 더 이상 실행될 문이 없을 때 종료한다.

var키워드로 선언한 전역 변수는 전역 객체의 프로퍼티가 된다. 이는 전역 변수의 생명 주기가 전역 객체의 생명 주기와 일치한다는 것을 말한다. 브라우저 환경에서 전역 객체는 window이므로 var키워드로 선언한 전역 변수는 window객체의 프로퍼티다. 즉, var 키워드로 선언한 전역 변수의 생명 주기는 전역 객체window의 생명 주기와 일치한다.
+) 전역 객체 :
자바스크립트 엔진에 의해 코드가 실행되기 전에 어떤 객체보다도 먼저 생성되는 특수한 객체. 클라이언트 사이드 환경(브라우저)에서는 window, 서버 사이드 환경(node.js)에서는 global객체를 의미한다.

전역 변수의 문제점과 대안
문제점 : 암묵적 결합, 긴 생명 주기, 스코프 체인 상에서 종점에 존재, 네임스페이스 오염
대안 : 즉시 실행 함수, 네임스페이스 객체, 모듈 패턴(클래스를 모방..클로저 기반 동작..정보 은닉..), ES6모듈(전역 변수 사용 불가... )

profile
hello world

0개의 댓글