"자바스크립트는 왜 프로토 타입을 선택했을까" 라는 글을 보면서 정말 많은 공부가 되었다.
프로토타입이란 무엇인가 그리고 프로토타입은 왜 이런 특성을 가지게 되었을까 라는 것을 정말 깊게 파고들은 글이었다.
이 글을 통해 많은 것을 알게 되고 공부하는데 한 곳에서 막히게 되었다.
바로 호이스팅에 대한 부분이었다.
호이스팅
실행 컨텍스트 생성 시 렉시컬 스코프 내의 선언이 끌어올려지는 것
위 글을 읽으며 "실행 문맥", "렉시컬 스코프" 같은 개념들이 왜 존재하는지에 대한 해답을 얻을 수 있었다.
하지만 호이스팅이 왜 존재하는지에 대한 개념은 이해하기가 힘들었다.
(댓글들에 관련 질문이 없는 것을 보면 다른 분들은 이해를 한 것 같은데...)
그래서 자바스크립트에는 왜 호이스팅이 존재하는지에 대한 내용은 내 나름대로 생각해 보게 되었다.
이 글은 내 생각을 적은 글이고 그러다 보니 틀린 내용이 있을 수 있다.
혹시라도 이건 아니다 라는 내용을 발견하신다면 언제든 편하게 말씀해주세요!
자바스크립트가 만들어진 이유
웹페이지의 생동감을 위해
자바스크립트는 "웹페이지에 생동감을 불어넣기 위해" 만들어진 프로그래밍 언어이다.
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
그렇기 때문에 코드가 실행되기 전에 선언된 위치들을 미리 수집한 후에 런타임에서는 만들어둔 환경을 실행시키기만 하는 것이 가능하다.
이렇게 했을 경우의 장점은 다음과 같다
마무리
내 생각을 정리해 보자면
자바스크립트는 웹 페이지에 동적인 요소를 간편하게 추가하기 위해서 만들어진 언어이고 손쉽게 배우고 빠르게 적용할 수 있도록 하는 것이 중요했다. 그런 맥락에서 볼 때 호이스팅은 자바스크립트를 배우는 데 드는 비용을 줄일 수 있게 도와주는 것이 아닐까...? 로 정리해 볼 수 있겠다.