kakasoo

setTimeout은 call stack의 최상단에 콜백함수를 넣는가? 본문

프로그래밍/JavaScript

setTimeout은 call stack의 최상단에 콜백함수를 넣는가?

카카수(kakasoo) 2023. 7. 17. 23:36
반응형

또는, setTimeout은 call stack의 제어권을 빼앗는가?

 

function b () {
    let i = 0;
    
    while(true){
        console.log('in');
        i++;
        if (i % 1000 === 0) {
            new Promise((res) => {
                setTimeout(() => {
                    console.log('ok');
                }, 3000);            
            })               
        }
    }
    console.log('out');
}

이 함수에서 내부의 setTimeout이 있는 Promise는 동작하지 않는다. 호출 스택에 있을 b가 끝나지 않기 때문이다. setTimeout의 시간에 도달한다고 하더라도, 호출 스택이 비지 않으면 이벤트 루프는 이벤트 큐의 함수를 호출 스택으로 내보내지 않는다. 즉, setTimeout은 호출 스택의 최상단에 콜백함수를 넣지도 않고, 제어권을 뺏지도 않는다. 호출 스택이 비기 전까지 이벤트 루프는 새 함수를 넘기지 않는다.

 

반응형