자바스크립트 엔진은 자바스크립트 코드를 실행하는 컴퓨터 프로그램이다.
우리가 사용하는 모든 브라우저에 자체 자바스크립트 엔진이 있고, 가장 유명한 것은 구글 V8이 있다.
V8 엔진은 구글 크롬뿐만 아니라 node.js도 동작시킨다.
모든 자바스크립트 엔진은 Call stack과 Heap을 가지고 있다.
Call stack은 Execution Context를 사용하여 코드가 실행되는 곳이다.
Heap은 앱에 필요한 모든 객체를 저장하는 unstructured memory pool이다.
그렇다면 Call stack은 코드를 어떤 방식으로 실행하는가?
자바스크립트는 원래 순수 Interpreter 언어였다.
하지만 Interpreter 언어의 문제는 Compilation 언어보다 훨씬 느리다는 것이다.
옛날에는 이 사실이 문제 없었지만, 현대에 들어 성능 문제가 발생했다.
이를 해결하기 위해 현대 자바스크립트 엔진은 compile과 interpret를 같이 사용하는 Junt-in-time Compilation 방식을 사용한다.
실행할 코드를 한 번에 machine code로 컴파일하여 즉시 실행하는 방식이다.
compile 이후 실행되기 때문에 코드를 한 줄씩 실행하는 것보다 훨씬 빠르다.
compilation과 다른 점은 실행가능한 파일이 없다는 것이다.
파싱단계에서 코드는 AST(Abstract Syntax Tree)라고 불리는 데이터 구조로 분해된다.
AST는 DOM 트리와 아무 상관 없다. AST는 엔진 내부의 전체 코드를 나타낸 것이다.
https://ko.javascript.info/intro
https://medium.com/@aamchora/what-exactly-just-in-time-jit-compilation-is-in-javascript-f7aea482843f
https://www.udemy.com/course/the-complete-javascript-course/