전역 변수를 무분별하게 사용하는 것은 위험한 방식이다.
가급적 지역 변수를 사용해야 한다.
변수는 선언에 의해 생성되고, 할당에 의해 값을 갖는다.
변수는 자신이 선언된 위치에서 생성되고 소멸한다. 즉, 스코프 안에서의 생명주기를 가지게 된다.
다만, 전역 변수의 경우 애플리케이션의 생명 주기와 같게 된다.
function foo() {
var x = 'local';
console.log(x);
return x;
}
foo();
console.log(x); // ReferenceError: x is not defined
호이스팅의 개념을 배울 때 변수 선언은 선언문이 어디에 있던 가장 먼저 실행된다고 했다.
다만, 위 개념은 전역 변수에 해당하며, 함수 레벨의 변수일 경우 함수가 호출된 시점에 생성된다.
즉, 지역 변수의 생명주기는 함수의 생명주기와 일치하다.
var x = 'global';
function foo() {
console.log(x);
var x = 'local';
}
foo(); // undefined
console.log(x);// global
호이스팅은 스코프 단위로 동작한다.
전역 변수의 경우에는 전역 객체의 프로퍼티가 되어 전역 객체의 생명 주기와 일치하게 된다.
여기서 전역 객체란, 코드가 실행되기 이전에 자바스크립트 엔진에 의해 어떤 객체보다 먼저 생성되는 특수한 객체다.
브라우저에서는 window를, node환경 에서는 global 객체를 의미한다.
즉, 브라우저 환경에서의 전역 객체 window는 창을 닫기까지 유효하다.
전역 변수는 전역 객체와 동일한 생명주기를 가지기 때문에, 브라우저 환경에서의 전역 변수 역시 창을 닫기까지 유효하다.