1. 개념과 구조 - 라이프 사이클 스코프

→ 자바스크립트는 변수 하나, 함수 하나를 일일이 만들고 생성하고 제어하지 않게 되어 있습니다.

스코프라고하는 일종의 그룹핑 역할을 하는 공간으로 그 라이프 사이클을 만들게 됩니다.

그러므로 스코프 공간에 만들어진 변수나 함수는 그 스코프와 삶을 같이 한다고 할 수 있습니다.

2. 개념과 구조 - 동기와 비동기

3. 개념과 구조 - 이벤트 시스템

function main() {
  const BUBBLING_PHASE = false;
  const CAPTURING_PHASE = true;
  const PHASE_NAME = ['NONE', 'CAPTURING', 'TARGET', 'BUBBLING'];

  function eventLogger({ target, currentTarget, eventPhase }) {
    console.log(`${target.dataset.name}, ${currentTarget.dataset.name}, ${PHASE_NAME[eventPhase]}`);
  }

  let divs = document.querySelectorAll('.divEvent');
  divs.forEach(div => div.addEventListener('click', eventLogger, BUBBLING_PHASE));
}

document.addEventListener('DOMContentLoaded', main);

// target : 현재 마우스가 클릭된 DOM요소
// currentTarget : 버블링 되었을 때 마지막 버블링 마지막 DOM요소

Untitled

4. 개념과 구조 - 런타임 & 컴파일 타임

런타임 상황에서 TypeScript 만으로 해결하지 못하는 경우.

(즉 컴파일 상황과 런타임 상황의 차이로 인해 발생할 수 있는 문제점)

function add(x: number, y: number) {
  return x + y;
}

type ObjType = {
  x: number;
  y: number;
}

// 서버에서 JSON 데이터를 받아올 때 런타임과 컴파일 환경의 차이로 인한 허점
const json = `{ "x": "abc", "y": 20 }`;
const obj1: ObjType = JSON.parse(json) as ObjType;

add(obj1.x, obj1.y);

프로그램이 실행(런타임 환경) 중에 외부로 부터 JSON 데이터를 받아 올 때 다음과 같이 다른 타입이 오는 경우가 발생한다면(외부 데이터 자체 오염됐을 때) TypeScript(컴파일 환경) 에서는 해당 에러를 잡을 수 없다.