2️⃣ 호출 스택
3️⃣ 함수 범위, 블록 범위, 렉시컬(lexical) 범위
4️⃣ 메시지 큐와 이벤트 루프
5️⃣ 재귀
Document Object Model, DOM (문서 객체 모델)
DOM의 생성 과정
웹 브라우저는 우선 읽어들인 문서를 분석하여 어떤 내용이 웹 페이지에 렌더링이 될지를 결정한 뒤, 렌더링을 수행한다.
이 때, 렌더링을 결정할 때 ‘렌더 트리’를 생성하는데, 웹 페이지에 표시될 HTML 요소들과 이와 관련한 스타일 요소들을 구성하게 된다.

DOM의 구조

html이 있으며, 하위에 head와 body 요소가 존재한다.head와 body에는 각각에 속하는 요소들이 얽히고 얽혀 하나의 나무와 같은 구조를 형성하게 되는데 이를 ‘노드 트리’ 혹은 ‘DOM 트리’, ‘레이아웃 트리’라고 부른다.DOM의 용도
window와 그 하위인 document가 있다.
주의 사항
DOM은 HTML이 아니다.
DOM은 HTML 문서의 인터페이스이다. 문서 자체에 올바른 HTML 규칙을 작성하지 않더라도, DOM에서는 규칙을 교정시켜 올바르게 출력해준다.
<!DOCTYPE HTML>
<html>
HELLO, World!
</html>
<!-- HTML 문서에 <head>와 <body>가 없더라도 DOM에서는 규칙을 교정해 추가해준다. -->
또한, JavaScript를 이용해 DOM 트리에 새로운 노드를 추가할 수 있다. 그러나, 이 노드가 HTML 문서에 반영되는 것은 아니다.
const newNode = document.createElement("p");
newNode.innerText = "내용 추가!";
DOM은 브라우저에 보이는 것이 아니다.
브라우저는 DOM과 CSSOM의 조합인 렌더 트리를 통해 스크린에 웹 페이지를 그려낸다.그러나, DOM의 모든 요소가 브라우저에 보여지지는 않는다.
<!DOCTYPE HTML>
<html lang="ko">
<head></head>
<body>
<h1 style="display:none;">까꿍</h1>
</body>
</html>
위의 코드에서 h1은 DOM에서는 보여지고 있지만, 실제 브라우저에서는 display:none;이라는 style의 설정으로 인해 보여지지 않게 된다.
이런 점에서 DOM과 브라우저에서 보이는 것이 각각 다르다는 점을 명심해야 한다.