이벤트 흐름 : 캡처링 단계 → 타깃 단계 → 버블링 단계
캡처링 : 최상위 조상부터 해당 요소까지 이벤트 전파 과정
addEventListener
의 capture
option이 true
일 때, 이벤트를 잡아낼 수 있음버블링 : 해당 요소부터 최상단 조상까지 부모 요소를 통해 이벤트가 전파되는 과정
focus
등의 이벤트를 제외하고 모든 이벤트가 버블링 된다.이벤트 위임
함수, 연산자에 전달되는 값은 적절한 dataType으로 자동 변환
toString()
, valueof()
를 통해 정해진 타입으로 반환 가능
TS에선 변수의 타입을 명시적으로 지정 → 정적 에러를 줄임
얕은 복사는 객체의 주소 값을 복사
깊은 복사는 객체의 실제 값을 복사
...
spread 연산자는 깊은 복사A → B
- 얕은 복사
- B 변경 시에 A도 같이 변경
- 깊은 복사
- B 변경 시, A는 불변
동기 : 작업을 순차적으로 수행, Req → Res를 받아야 다음 동작이 이루어짐,
어떤 작업이 수행 중이라면 뒤의 작업은 대기
비동기 : 작업을 병렬적으로 수행, 완료 순서가 보장되지 않음
JS는 싱글 스레드 기반 동기적 작동
setTimeout
, ajax
, Promise
객체는 대표적인 비동기 로직
Call Stack
: 함수의 호출을 기록하는 스택 방식의 자료구조
Promise
, async/await
과 같은 비동기 호출의 콜백함수들은 Microtask Queue
에 담겨 실행된다.
Event Loop
는 현재 실행중인 Task가 있는지, Queue
내에 Task가 있는지 주기적으로 확인하고, Call Stack
에 Task가 없다면, Queue
에서 Task를 꺼내와 Call Stack
에 push
즉, 특정 코드의 연산이 끝날 때까지 코드의 실행을 멈추지 않고, 다음 코드를 먼저 실행하는 것이 JS의 비동기 처리
Promise
의 콜백함수는 Microtask Queue
에 적재async/await
에선, await
을 만나면 작업을 중지하고 Microtask Queue
에 적재WebAPI
의 비동기 함수들 : ajax
, fetch
,setTimeout
, setInterval
등...Task Queue
에 적재roots
라는 오브젝트의 집합에서 참조하는 모든 오브젝트들을 찾아 닿을 수 없는 오브젝트의 메모리를 제거new
와 함께 호출하지 않으면 에러 발생map()
: 모든 요소 각각에 대해 콜백함수를 실행해 새로운 배열 생성reduce()
: 각 요소에 대해 주어진 함수를 실행 후 하나의 결과값 returnforEach()
: 주어진 콜백을 각각의 요소들에게 실행, 원본 배열을 변경하지 않음성능
reduce
>forEach
>map
filter()
: 특정 조건을 만족하는 요소들로만 새로운 배열 생성, 원본 배열을 변경하지 않음