자바스크립트 엔진의 런타임 환경과 호스팅(Hosting) 개념 이해

자바스크립트 엔진은 자바스크립트 코드를 실행하는 소프트웨어입니다. 여러 회사와 개발자들이 독립적으로 자바스크립트 엔진을 개발하여 제공하고 있습니다. 대표적인 자바스크립트 엔진으로는 V8, SpiderMonkey, JavaScriptCore가 있습니다.

각각의 자바스크립트 엔진은 고유한 런타임 환경을 가지고 있습니다. 런타임 환경은 자바스크립트 코드를 실행하는 과정에서 필요한 기능들을 제공합니다. 이러한 기능에는 메모리 관리, 변수 스코프, 호출 스택 등이 포함됩니다.

호스팅(Hosting) 개념 이해

호스팅은 자바스크립트 엔진에서 코드를 실행하기 전에, 선언된 변수와 함수를 메모리에 어떻게 저장할지 결정하는 과정입니다. 호스팅은 크게 변수 호이스팅과 함수 호이스팅으로 나뉩니다.

변수 호이스팅은 자바스크립트 엔진이 코드를 실행하기 전에 모든 변수 선언을 메모리에 끌어올리는 과정입니다. 따라서 변수를 선언하기 전에도 변수를 사용할 수 있습니다. 그러나 해당 변수에 값이 할당되지 않은 경우, undefined로 초기화됩니다.

함수 호이스팅은 함수 선언문을 메모리에 올리는 과정입니다. 함수 선언문은 변수 호이스팅과 달리 전체 함수를 메모리에 올리므로, 함수를 선언하기 전에 함수를 호출할 수 있습니다.

예를 들어, 다음과 같은 예제 코드를 살펴봅시다.

console.log(x); // undefined
var x = 5;

foo(); // "Hello, World!"
function foo() {
  console.log("Hello, World!");
}

위 코드에서 변수 x와 함수 foo는 호이스팅을 통해 선언됩니다. 따라서 변수 x는 호이스팅 후에 undefined로 초기화되고, 함수 foo는 호이스팅 후에 호출 가능해집니다.

자바스크립트 엔진은 호이스팅을 통해 코드 실행 전에 필요한 변수와 함수를 사전에 처리하여 예기치 않은 동작을 방지합니다.

참고 자료