push
되고 return
되면 pop
된다.const btn = document.querySelector('button');
btn.addEventListener('click', () => {
let myDate;
for(let i = 0; i < 10000000; i++) {
let date = new Date();
myDate = date
}
console.log(myDate);
let pElem = document.createElement('p');
pElem.textContent = 'This is a newly-added paragraph.';
document.body.appendChild(pElem);
});
myDate
와 관련한 계산이 천만번동안 실행되고 계산이 진행중일때 잠깐 브라우저가 멈춰 있는 것처럼 보이게 된다.console.log(myDate)
까지 끝난 다음p
텍스트가 출력된다.DOM
,setTimeout
, fetch
등이 있다.console.log('1');
setTimeout(() => {console.log('2')}, 1000);
console.log('3');
console.log('1')
을 처리하고,setTimeout
을 만나면, 이건 JS 엔진이 할 일이 아니니까 web API로 넘긴다.setTimeout
함수의 역할인 1000, 1초를 센다.console.log('3')
를 바로 처리한다.setTimeout
의 콜백함수를 Callback queue
로 보낸다.console.log('3');
를 위에서 바로 처리했으므로, 콜스택은 비어져있다.Callback queue
의 가장 상단에 있는 -선입 선출이니까- console.log('2');
를 push
한다.Callback queue
는 task queue
를 말함. (웹 API이기 때문)console.log('1');
setTimeout(() => {console.log('2')}, 0);
console.log('3');
// -------- 시간이 0이더라도 똑같음. 위와같은 단계를 거치기 때문.
promise
와 동일하다.promise
의 순서는 어떻게 진행될까?setTimeout
, DOM
과 같이 웹 API가 처리하는 콜백함수 또는 이벤트 핸들러가 일시적으로 보관되는 영역이다.promise
의 콜백이 일시적으로 보관되는 영역이다.setTimeout(function() { // (A)
console.log('A');
}, 0);
Promise.resolve().then(function() { // (B)
console.log('B');
}).then(function() { // (C)
console.log('C');
});
setTimeout
부분은 태스크 큐가,Promise
부분은 마이크로 태스크 큐가 작동한다.Promise
의 콜백이 먼저 실행된다.https://www.youtube.com/watch?v=8aGhZQkoFbQ
https://developer.mozilla.org/ko/docs/Learn/JavaScript/Asynchronous/Concepts
https://www.udemy.com/course/advanced-javascript-concepts/
https://meetup.toast.com/posts/89