자바스크립트의 호이스팅

김민섭·2023년 4월 3일
0

"자바스크립트는 왜 프로토 타입을 선택했을까" 라는 글을 보면서 정말 많은 공부가 되었다.

프로토타입이란 무엇인가 그리고 프로토타입은 왜 이런 특성을 가지게 되었을까 라는 것을 정말 깊게 파고들은 글이었다.

이 글을 통해 많은 것을 알게 되고 공부하는데 한 곳에서 막히게 되었다.

바로 호이스팅에 대한 부분이었다.

호이스팅
실행 컨텍스트 생성 시 렉시컬 스코프 내의 선언이 끌어올려지는 것

위 글을 읽으며 "실행 문맥", "렉시컬 스코프" 같은 개념들이 왜 존재하는지에 대한 해답을 얻을 수 있었다.

하지만 호이스팅이 왜 존재하는지에 대한 개념은 이해하기가 힘들었다.

(댓글들에 관련 질문이 없는 것을 보면 다른 분들은 이해를 한 것 같은데...)

그래서 자바스크립트에는 왜 호이스팅이 존재하는지에 대한 내용은 내 나름대로 생각해 보게 되었다.

이 글은 내 생각을 적은 글이고 그러다 보니 틀린 내용이 있을 수 있다.

혹시라도 이건 아니다 라는 내용을 발견하신다면 언제든 편하게 말씀해주세요!

자바스크립트가 만들어진 이유
웹페이지의 생동감을 위해

자바스크립트는 "웹페이지에 생동감을 불어넣기 위해" 만들어진 프로그래밍 언어이다.

HTML 내부에 스크립트를 작성하여 웹페이지를 불러올 때 스크립트가 자동으로 실행되는 방식이다.

자바스크립트가 나오게 된 이유를 알려면 자바스크립트가 등장하기 전의 웹을 알아야 한다.

웹의 초기 시절에는 HTML과 CSS만 사용되었기 때문에 웹 페이지들이 정적이고 상호작용이 제한적이었다.

이러한 상황에서 자바스크립트는 웹 페이지에 동적 요소와 상호작용을 추가하여 사용자들의 경험을 더욱 만족스럽게 만들어주었다.

사용하기 쉬운 언어
빠르고 간편하게

자바스크립트는 쉽고 사용하기 쉬운 프로그래밍 언어로 설계되어 있다.

이는 자바스크립트가 만들어진 이유와도 어느정도 통한다고 생각한다.

웹 개발자들이 손쉽고 빠르게 동적인 요소들을 추가할 수 있게끔 도와줘서 개발하는데 드는 비용을 줄여준 것이다.

그리고 호이스팅도 이러한 맥락에서 선택된 특성 중 하나라고 생각한다.

자바스크립트의 스코프
자바스크립트는 실행된 곳의 위치가 아닌 선언된 위치를 기준으로 스코프를 결정한다.

예를 들어 아래의 코드를 봤을 때 bar 함수는 실행되는 곳은 foo 내부에서 실행되지만 선언된 곳은 전역 스코프이다.

그렇기 때문에 선언된 곳인 전역 스코프에 존재하는 x를 참고하여 1을 콘솔에 찍게 되는 것이다.

var x = 1;

function foo() {
  var x = 10;
  bar();
}

function bar() {
  console.log(x);
}

foo(); // 1
bar(); // 1

그렇기 때문에 코드가 실행되기 전에 선언된 위치들을 미리 수집한 후에 런타임에서는 만들어둔 환경을 실행시키기만 하는 것이 가능하다.

이렇게 했을 경우의 장점은 다음과 같다

  1. 선언부들을 미리 수집했기 때문에 함수와 변수를 선언하기 전에 사용할 수 있다.
  2. 코드의 구조를 유연하게 설계할 수 있으며 필요에 따라 변수나 함수를 먼저 사용할 수 있다.
  3. 코드 작성 시 자유도를 높여주며, 다양한 프로그래밍 스타일을 가능하게 한다.
    즉, 자바스크립트를 쉽고 간편하게 작성할 수 있게끔 하려고 하다 보니 호이스팅이라는 현상이 일어나게 된 것이 아닐까 라는게 내가 내린 결론이다.

마무리

내 생각을 정리해 보자면

자바스크립트는 웹 페이지에 동적인 요소를 간편하게 추가하기 위해서 만들어진 언어이고 손쉽게 배우고 빠르게 적용할 수 있도록 하는 것이 중요했다. 그런 맥락에서 볼 때 호이스팅은 자바스크립트를 배우는 데 드는 비용을 줄일 수 있게 도와주는 것이 아닐까...? 로 정리해 볼 수 있겠다.

profile
getting ready to run

0개의 댓글