JavaScript 변수를 선언 전에 사용할 수 있을까?
네, 가능합니다. 호이스팅(Hoisting)이라는 메커니즘 덕분에 JavaScript에서는 변수를 선언하기 전에 해당 변수를 사용할 수 있습니다.
JavaScript 엔진(파서)은 코드를 실행하기 전에 먼저 전체 함수를 훑어보며 변수 선언부를 찾아 해당 스코프의 최상단으로 끌어올립니다. 이러한 내부 처리 과정 때문에 변수가 선언되기 전에 사용되는 것처럼 보이는 현상이 발생하는데, 이것이 바로 호이스팅입니다.
호이스팅 예제
예를 들어, 다음과 같은 코드를 살펴보겠습니다.
rank = 5; var rank;
위 코드는 실제 실행 시점에는 아래 코드와 완전히 동일하게 동작합니다.
var rank; rank = 5;
JavaScript 엔진이 var rank; 선언을 스코프 최상단으로 끌어올린 후 코드를 실행하기 때문에, 선언문이 뒤에 있어도 에러 없이 정상적으로 작동하는 것입니다.
주의할 점
호이스팅은 선언 자체에만 적용되며, 값의 초기화까지 끌어올려지는 것은 아닙니다. 따라서 선언 전에 변수 값을 읽으면 undefined가 반환됩니다.
또한 ES6에서 도입된 let과 const도 호이스팅되지만, 선언문에 도달하기 전까지는 접근할 수 없는 일시적 사각지대(TDZ, Temporal Dead Zone)에 놓이므로 선언 전에 사용하면 ReferenceError가 발생합니다. 안전하고 예측 가능한 코드를 위해 변수는 항상 사용하기 전에 선언하는 습관을 들이는 것이 좋습니다.