JavaScript에서 호이스팅(Hoisting)이라는 용어는 변수와 함수 선언이 코드의 최상단으로 끌어올려지는 현상을 의미합니다. 이 과정은 컴파일 단계에서 발생하며, 변수와 함수가 선언되기 전에 참조되어도 오류가 발생하지 않습니다. 호이스팅은 아래와 같이 구체화될 수 있습니다.
변수 호이스팅 (Variable Hoisting):
var
로 선언된 변수는 선언이 실행 컨텍스트의 변수 객체(Variable Object)에 추가되며, 그 변수는 선언된 코드 라인에 도달하기 전까지 undefined
로 초기화됩니다.
예시:
console.log(a); // undefined
var a = 5;
console.log(a); // 5
위 코드는 컴파일 단계에서 아래와 같이 변환됩니다.
var a = undefined;
console.log(a); // undefined
a = 5;
console.log(a); // 5
함수 호이스팅 (Function Hoisting):
함수 선언식은 전체 함수가 호이스팅되며, 함수 표현식은 변수 호이스팅과 동일하게 처리됩니다. 함수 선언식은 아래와 같이 작동합니다.
예시:
console.log(foo()); // "Hello!"
function foo() {
return "Hello!";
}
함수 표현식의 경우:
console.log(foo()); // TypeError: foo is not a function
var foo = function() {
return "Hello!";
};
함수 선언식은 선언 전에 호출할 수 있지만, 함수 표현식은 그렇지 않습니다.
let
과 const
의 호이스팅:
let
과 const
는 var
와 달리 선언 전에 참조하려고 하면 참조 오류(ReferenceError)가 발생합니다. 이는 일시적 사각 영역(Temporal Dead Zone, TDZ) 때문에 발생하며, 호이스팅이 발생하더라도 값에 접근할 수 없는 상태를 나타냅니다.
중복 선언의 문제:
함수 선언과 변수 선언이 같은 스코프 내에 있을 경우, 변수 선언이 함수 선언을 덮어쓸 수 있습니다.
함수와 변수의 선언 위치에 따라 예상치 못한 동작이 발생할 수 있으므로, 변수와 함수를 사용하기 전에 선언하는 것이 좋은 코딩 습관입니다.
변수 호이스팅 / 함수 호이스팅 으로 나누어 설명하고
let const var 의 호이스팅으로 이어져서 설명하고
마무리로 왜 var가 트렌드하지 못한지에 대해 설명할 것
JavaScript에서 호이스팅(Hoisting)이라는 용어는 변수와 함수 선언이 코드의 최상단으로 끌어올려지는 현상을 의미합니다. 이 과정은 컴파일 단계에서 발생하며, 변수와 함수가 선언되기 전에 참조되어도 오류가 발생하지 않습니다.
함수에서는 선언식의 경우 전체 함수가 모두 호이스팅 되며 , 표현식으로 이뤄진 함수는 변수 호이스팅과 동일하게 처리가 됩니다.
변수에서는 var의 경우 선언이 실행컨텍스트의 변수객체에 추가되고 선언된 코드라인 도달전까지 undefined로 초기화 됩니다.
const와 let의 경우 선언전에 참조할 수 없습니다.