FE 기술면접에서 반드시 묻는 질문이다. 어느정도 예상된 질문이기 떄문에 준비한 내용대로 답변을 했지만 블로그에 한번 정리해 보는것이 좋을 것 같아 정리해 보았다.
Javascript에서 호이스팅(Hoisting)은 코드에 선언된 변수 및 함수를 코드 상단으로 끌어 올리는 것이다.
// 예시1 변수선언
console.log('hello world');
var name = 'eddy';
let age = 20;
// 예시1 Js Parser내부의 호이스팅의 결과
var name; // 호이스팅 '변수 선언'
console.log('hello world');
name = 'eddy'; // '변수 할당'
let age = 20; //호이스팅 X
// 예시2 함수 선언문 vs 함수 표현식
name();
age();
function name() { // 함수 선언문
console.log('hello world');
};
var age = function () { // 함수 표현식
console.log('hello world');
};
// 예시2 Js Parser 내부의 호이스팅 결과
var age; // 호이스팅, 함수 표현식의 변수값 '선언'
function name() { // 호이스팅, 함수 선언문
console.log('hello world2');
};
name();
age(); // ERROR!
age = function () {
console.log('hello world2');
}
변수에 할당된 함수표현식은 호이스팅이 발생하지 않기 때문에 변수의 스코프 규칙을 그대로 따른다.
var getName = 'ken';
function getName() {
console.log('ken');
};
console.log(typeof getName); //string
var getName; //undefined
function getName() {
console.log('ken');
};
console.log(typeof getName); //function
참고