호이스팅
자바스크립트 엔진은 코드를 인터프리팅하기 전에 컴파일한다. 컴파일레이션 단계 중에는 모든 선언문을 찾아 적절한 스코프에 연결해주는 과정이 있다. (바로 이 과정이 렉시컬 스코프의 핵심)
var a = 2;
// var a;
// a = 2;첫번째 구문은 선언문으로 컴파일레이션 단계에서 처리된다
두번째 구문은 대입문으로 실행 단계까지 내버려둔다
이 과정을 비유적으로 말하면 변수와 함수 선언문은 선언된 위치에서 코드의 꼭대기로 '끌어올려'진다. 이렇게 선언문을 끌어올리는 동작을 '호이스팅이라고 한다'
즉, 달걀(선언문)이 닭(대입문)보다 먼저다
함수가 먼저다
함수와 변수 선언문 모두 끌어올려지지만, 먼저 함수가 끌어올려지고 다음으로 변수가 올려진다
foo(); // 1
var foo;
function foo() {
console.log(1);
}
foo = function() {
console.log(2);
}엔진은 위 코드를 아래와 같이 해석한다.
function foo() {
console.log(1);
}
foo(); // 1
foo = function() {
console.log(2);
}Last updated
Was this helpful?