function one() {
second();
console.log("하나")
}
function second() {
third();
console.log("둘")
}
function third() {
console.log("셋")
}
one();
더보기
코드순서
셋 > 둘 > 하나
↑ 이순서로 쌓이고 | third() | ↓이순서로 실행돰 |
second() | ||
first() | ||
anonymous |
호출스택(함수의 호출, 자료구조의 스택)
- anonymous는 가상의 전역 컨텍스트(항상 존재)
- 함수 호출 순서대로 쌓이고 역순으로 실행됨
- 함수실행이 완료되면 스택에서 사라짐
- LIFO(Last in first out)나중에 쌓인게 먼저나가는 후입 선출 구조로 스택이라 불림
function oneMore() {
console.log("하나")
}
function run() {
console("둘둘")
setTimeout(() => {
console.log("셋셋")
}, 0)
new Promise((resolve) => {
resolve("넷넷");
})
.then(console.log);
oneMore();
}
setTimeout(run, 5000);
더보기
코드순서
둘둘 > 하나 > 넷넷> 셋셋
↑ 이순서로 쌓이고 | third() | ↓이순서로 실행돰 |
second() | ||
first() | ||
anonymous |
이벤트루프 구조
- 이벤트루프 : 이벤트 발생(setTimeout 등) 시 호풀할 콜백 함수들 호출 순서 결정하는 역할
- 테스크 큐 : 이벤트 발생 후 호출될 콜백 함수들 순서 대기 공간
- 백그라운드: 타이머나 비동기 작업 콜백, 이벤트 리스너들이 대기하는 공간
- 이벤트 류프는 태스크 큐에 다음함수가 들어올때 가지 계속대기
- 태스크 큐는 실제 여러개고 태스크 큐들과 함수들 간의 순서를 이벤트루프
호출스택 | 백그라운드 | ||
↩︎이벤트루프 | |||
태스크 큐 |
'WEB > Node.js' 카테고리의 다른 글
[JavaScript] 비동기 작업 최적화(병렬처리) Promise.all 과 Promise.allSettled (0) | 2023.02.10 |
---|---|
[Node.js]REPL,모듈,노드내장객체 (0) | 2022.03.16 |
[NodeJS]-1. 노드 정의 및 특성 (0) | 2022.02.24 |
[JavaScript] for in 과 for of 반복문 그리고 enumerable, iterable 속성 (0) | 2021.12.17 |
[JavaScript]Promise 와 async/await (0) | 2021.12.15 |