변수는 var, let, const 3 가지가 있다.
var는 선언한 후에 다시 선언이 가능.
var name = 'Mike';
console.log(name); // Mike
var name = 'Jane';
console.log(name); // Jane
var는 선언하기 전에 사용할 수 있다. (호이스팅)
그러나 name 이라는 변수만 호이스팅 되고, 값 할당은 호이스팅 안됨.
console.log(name);
var name = 'Mike';
호이스팅이란?
스코프 내부 어디서든 변수 선언은 최상위에 선언된 것 처럼 행동
let은 실제로는 호이스팅이 되지만, 호이스팅 되지 않는것처럼 동작. 이유는 TDZ 때문
let age = 30;
function showAge() {
console.log(age);
let age = 20; // 함수 스코프 안에서 호이스팅 일어나,
// console.log 가 찍히기 전에 변수 선언만 된 것처럼 작동.
// => 오류가 발생한다.
// 만약, 함수 안에서 age선언이 없었다면 함수 밖에서 선언된
// age 값을 참조해 오류가 발생하지 않는다.
}
TDZ(Temporal Dead Zone)이란?
변수가 할당을 받기 전에 사용하지 못하는 것.
TDZ 는 스코프 단위로 발생
함수 스코프는 함수안에서 선언된 변수만 지역변수로 취급
블록 스코프는 함수 + 블록(if문, while문, for문 등...)에서 선언된 변수 모두를 지역변수로 취급
결론 : c++ 에서 하는것처럼 변수 선언하면 문제될 것이 없다.