require 하는 module은 exports라고 하는 객체의 값을 참조하여 바라보도록 하는 것이다.
따라서, 같은 module을 require하면 같은 주소값을 바라보는 것이 되므로,
mod1과 mod2를 비교하면 같은 것이 된다.
왜 한번만 찍히지!!!!???
require를 실행하면 my-module.js의 콘솔을 실행하고, 캐쉬를 남긴다.
다시 한번 require하면 캐쉬를 확인하고,
이미 콘솔로그 찍힌 기록이 있으므로 다시 콘솔을 찍지 않는다.
결국 한번만 찍히게 된다.
**비동기 함수 setTimeOut의 작동**
1. console.log("A")는 콜 스택에 푸쉬되었다가, 팝 되면서 A가 콘솔에 찍힌다.
2. console.log("B")가 Web API, 혹은 엔진?으로 넘어간다. setTimeOut 함수는 팝 되면서 사라진다.
3. 엄청 오래 걸리는 연산이 일어난다.
4. 태스크 큐에 console.log("B")가 넘어간다.
5. console.log("C")는 콜 스택에 푸쉬되었다가, 팝 되면서 C가 콘솔에 찍힌다.
6. 콜 스택이 비워진 걸 인식하고, 태스크 큐에 있던 console.log("B")가 넘어가서 B가 콘솔에 찍힌다.
위의 8번을 이해하였다면 틀리지 않았을 것이다.
C가 아니라 B가 먼저 나오는 것은,
superLongComputation() 이후,
이미 console.log("B")는 1초가 지난 뒤여서,
태스크 큐로 넘어가있는 상태였다!!!
그렇기 때문에 console.log("C")의 시간이 500으로 더 짧지만,
태스크 큐 상에서 뒤에 담겨서 나중에 실행되게 된다.
Server Side Technics - Solo Sprint (0) | 2019.06.21 |
---|---|
express, fs, body-parser - nodejs (0) | 2019.06.20 |
Solo Sprint - Servers and Node (0) | 2019.06.18 |
Ajax with Fetch API - Javscript (0) | 2019.06.10 |
Subclassing in ES6 - Javascript (0) | 2019.06.09 |
댓글 영역