타이머와 콜스택의 연관

setInterval / clearInterval

let num = 1;

const interval = setInterval(()=>{
    console.log(num++);
},1000);

setTimeout(()=>{
    console.log('Time out!');
    clearInterval(interval);
},6000);


콜백 함수 우선 순위

console.log('code1');

setTimeout(()=>{
    console.log('setTimeout 0');
}, 0);

console.log('code2');
setImmediate(()=>{
    console.log('setImmediate'); // setTimeout 과 거의 동시에 동작
});

console.log('code3');
process.nextTick(()=>{
    console.log('process.nextTick'); // 우선 순위 제일 높음
})

/* 
code1
code2
code3
process.nextTick
setTimeout 0
setImmediate


*/

타이머와 콜스택의 연관

console.time('timeout 0');

setTimeout(()=>{
    console.timeEnd('timeout 0');
    console.log('setTimeout 0');
}, 0);

// for(let=i;i<1000;i++){}

/*
timeout 0 : 2.318ms
setTimeout 0
*/

거의 2ms 가 걸린걸 볼 수 있는데, 여기서 setTimeout을 0초로 해도 정확하게 0초가 보장되지않는 다는 것을 알 수 있다.

왜냐하면 실제로 콜백함수가 수행되기위해서는 콜스택이 빌때까지 기다려야하므로 , 이것보다 더 많은 시간이 걸릴 수 있다. (만약 뒤에 for문이 있다면 더 오랜 시간이 걸릴 수 있음)