변수는 선언에 의해 생성되고, 할당을 통해 값을 갖는다, 그리고 언젠가 소멸한다.
즉 변수는 생성되고 소멸되는 생명 주기가 있다.
<aside> 💡 변수에 생명주기가 없다면, 한번 선언된 변수는 프로그램을 종료하지 않는 한 영원히 메모리 공간을 점유하게 된다.
</aside>
전역 변수의 생명 주기는 애플리케이션의 생명 주기와 같다.
지역 변수의 생명 주기는 함수가 호출되면 생성되고 함수가 종료하면 소멸한다.
function foo(){
var x = 'local';
console.log(x); // local
return x;
}
foo();
console.log(x); // ReferenceError
함수 내부에서 선언한 변수는 함수가 호출된 직후, 함수 몸체의 코드가 한 줄 씩 순차적으로 실행되기 이전에 자바스크립트 엔진에 의해 먼저 실행된다.
foo 함수가 호출되면! 함수내의 코드가 실행되기전에 자바스크립트 엔진이 x를 undefined로 초기화 하고, 그다음 코드가 실행이 되어 ‘local’이라는 문자열이 할당된다.
함수가 다 실행되고 나면 변수 x도 소멸되어 생명주기가 종료된다.
<aside> 💡 지역변수의 생명주기는 함수의 생명주기와 일치한다.
</aside>
var x = "global";
function foo(){
console.log(x);
var x = 'local';
}
foo();
console.log(x); // global
foo() 함수가 호출되는 시점에 자바스크립트 엔진이 foo 함수 내부의 지역변수인 x를 undefined로 초기화 해놓고, 그다음 함수내부의 코드가 한줄 한줄 실행된다.
즉 함수 내부의 console.log(x)는 undefined를 출력한다.