호이스팅
- 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미합니다. 호이스팅을 설명할 땐 주로 "변수의 선언과 초기화를 분리한 후, 선언만 코드의 최상단으로 옮기는" 것으로 말하곤 합니다. 따라서 변수를 정의하는 코드보다 사용하는 코드가 앞서 등장할 수 있습니다.
- 특히, var 변수의 경우 호이스팅으로 인해 undefined로 초기화하게 되므로, let과 const로 선언한 변수를 사용할 것을 권장합니다.
Javascript는 파싱과 실행 두 단계를 거쳐서 동작하게 됩니다.
1. 파싱 : 프로그램 전역 레벨에서의 파싱
2. 실행 : 실행문을 만나면 실행
- 변수와 함수명이 같은 경우 아래 코드와 같이 변수가 아직 실행문을 만나기 직전으로 변수값이 undefined로 되어있는 경우 함수가 덮어쓰여져 함수 호출이 일어납니다.
<script>
console.log(square); //함수를 호출함(변수 x)
console.log(square2); //함수 호출
var square = 0;
console.log(square); //변수를 출력함
function square(x) {
return x * x;
}
var square2 = function (x) {
return x * x;
};
</script>
참고