지역변수는 함수 호출 시 생성되고 일반적으로 함수 종료 시 소멸됨
-> 지역변수의 생명 주기 === 함수의 생명 주기
cf) 누군가 스코프를 참조하고 있다면 함수가 종료돼도 스코프가 소멸되지 않음
-> 지역변수가 함수보다 오래 생존할 수도 있음
var
키워드로 선언한 전역변수의 생명 주기 === 전역 객체의 생명 주기cf) var
키워드로 선언한 전역변수는 전역 객체의 프로퍼티임
var x = "global";
console.log(window.x); // 'global'
변수의 스코프는 좁을수록 좋음
(function () {
const foo = 1;
})();
console.log(foo); // Uncaught ReferenceError: foo is not defined
const MYAPP = {};
MYAPP.person = {
name: "J",
address: "Seoul",
};
const Counter = (function () {
// private member
let num = 0;
return {
// public member
increase() {
return ++num;
},
decrease() {
return --num;
},
};
})();
console.log(Counter.num); // undefined
console.log(Counter.increase()); // 1
console.log(Counter.decrease()); // 0
<script type="module" src="app.mjs"></script>