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과 브라우저에서 보이는 것이 각각 다르다는 점을 명심해야 한다.