면접-JavaScript #02 | 호이스팅

📚 개념 요약

📌 JS의 변수 선언

JS의 변수 선언은 2단계를 거쳐 수행된다. [1. 선언 단계(변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알림), 2. 초기화 단계(값을 저장하기 위한 메모리 공간을 확보하고 undefined를 할당해 초기화)]

선언 단계에서 변수 이름을 비롯해 모든 식별자는 실행 컨텍스트에 등록된다.

실행 컨텍스트

JS 엔진이 소스코드를 평가&실행하기 위해 필요한 환경을 제공하고, 코드 실행 결과를 관리하는 영역으로 식별자와 스코프를 관리한다.

=> 즉 어떤 값도 초기화하지 않아도 undefined로 암묵적인 초기화가 수행된다.

📌 호이스팅

호이스팅은 선언한 함수와 변수를 JS해석기가 가장 상단에 있는 것처럼 인식해서 런타임 이전에 코드라인 순서와 상관없이 함수 선언식(함수 표현식 X)과 변수를 위한 메모리 공간을 먼저 확보되는 JS의 특징을 말한다. 변수 호이스팅함수 호이스팅은 런타임 이전에 식별자가 생성된다는 것은 동일하지만 약간의 차이가 있다.

변수 호이스팅은 아래의 코드 예시처럼 undefined로 초기화가 된다.

console.log(score); //undefined
var score = 80;
console.log(score); //80

함수 호이스팅은 함수 선언문 이전에 함수를 참조할 수 있으며 호출할 수도 있다. 함수 선언문을 통해 암묵적으로 생성된 식별자는 함수 객체로 초기화가 되기 때문이다.

💡 질문

❓ 호이스팅이란

선언한 함수와 변수를 JS해석기가 코드의 가장 상단에 있는 것처럼 인식해서 런타임 이전에 코드라인 순서와 상관없이 함수 선언식(함수 표현식 X)과 변수를 위한 메모리 공간을 먼저 확보되는 JS의 특징을 말합니다.

변수 호이스팅은 식별자가 생성됨과 동시에 undefined가 초기화가 되는 반면 함수 호이스팅은 생성된 식별자에 함수 객체가 초기화 되는 차이점이 있습니다.