Javascript
(JavaScript) JS 동작원리
JJeongHyun
2023. 4. 2. 20:51
반응형
JS Engine
- Call Stack과 Memory Heap으로 데이터 및 코드 실행을 관리
- Memory Heap
- 메모리 할당이 일어나는 곳, 선언한 변수나 함수 등이 이곳저곳에 무작위하게 담겨져 있다
- Call Stack
- 코드가 실행될 때 쌓이는 곳, 자료구조의 stack과 같은 원리(선입후출)
- Memory Heap
Web APIs
- JS Engine만으로 웹이 동작하지 않고 그 외적인 요소들의 동작도 런타임으로 이루어 진다
- 브라우저에서 제공하는 Web APIs 중 대표적 3가지
- DOM(document)
- Ajax(XMLHttpRequest)
- Timeout(setTimeout)
- Call Stack에서 실행된 비동기 함수들은 Web API를 호출하고 그 호출된 함수의 Callback Function을 queue에 밀어 넣는다
Callback Queue, Event Loop
- Call Stack과 Callback Queue를 주시한다
- 만일 Call Stack이 비어있으면 Callback Queue에 첫 번째 callback function을 Call Stack으로 밀어 넣어 실행할 수 있게 해준다
JS 동작원리
- JS파일이 실행되면 호출된 코드가 Call stack에 쌓인다
- JS는 싱글스레드 기반의 언어이기에 한 번에 한 작업씩 실행되고 실행된 코드는 Call stack에서 제거된다
- 그 중에서 비동기함수가 실행되면 Web API가 호출되면서 넘어가면서 Call Stack에서 제거
- Web API는 비동기 함수의 콜백함수를 Callback Queue에 밀어 넣는다
- Call Stack과 Callback Queue를 주시하던 Event Loop가 Call Stack이 빈 상태가 되면 Queue에 들어있는 대기가 끝난 첫 번째 콜백함수를 Stack으로 밀어 넣는다, 이동 시킨다
console.log(1);
function testFunc() {
console.log(2);
setTimeout(() => {
console.log(3);
}, 1000);
console.log(4);
}
testFunc();
console.log(5);