[JS] 변수 호이스팅

자바 스크립트에서 변수를 중복해서 선언이 가능하다.

호이스팅이란!
var 선언문 function 선언문 등 모든 선언문이 해당 scope의 처음으로 옮겨진 것처럼 동작하는 특성을 말한다.

예를 들어서 자바에서 아래와 같이 선언하면 에러가난다.

System.out.println(num);
int num = 1;

하지만 자바스크립트에서는 선언이 된 부분을 문서의 첫번째로 옮기기 때문에

console.log(num);
var num =1;

이 코드를 실행하면 아래와 같이 동작한다는 것이다.

var num;
console.log(num); 
var num = 1;

그래서 결과적으로 console.log 이전에 변수 선언하는 문장이 없어도, 선언문이 scope의 처음으로 옮겨진 것 처럼 작동하여 undefined 가 출력된다.

자바에서는 변수를 두번 선언하는 것이 불가능하지만, 자바스크립트에서는 에러가 발생하지 않고, 바뀌게 된다.