callstack

이용원·2022년 11월 23일
0

JAVASCRIPT

목록 보기
28/34

자바스크립트는 최대 한 번에 한 줄의 코드만 실행 - singleStread

let foo = function(){
    console.log('foo')
}

let boo = function(){
    console.log('boo');
}

console.log('start');

setTimeout(()=>{
    boo();
}, 0)

foo();

콘솔예상 

'start'
'boo'
'foo'

실행결과
'start'
'foo'
'boo'

이유는 이벤트 루프, 테스트 큐
이벤트 루프는 자바스크립트의 동시성을 지원해준다
브라우저 환경이나 node.js에 내장되어 있는 기능/javascript기능X


javascript에서 함수를 호출하면 실행컨텍스트가 heap에 있는 객체를 참조해서 콜스텍에 푸시해서 순차적으로 실행한다.
이 때 wepApi, DOMapi, timerFunction과 같은 비동기함수들은 javascript에서 실행하는 것이 아니라 브라우저나 node.js에서 담당한다.
위 비동기 함수들은 이벤트 루프로 인해 콜스택으로 푸시되는 것이 아니라 테스트 큐라는 영영에 일단 저장되고 이벤트루프가 콜스택이 비어있다면 테스트 큐 영역에서 대기하고 있던 함수를 콜스택으로 푸시해서 실행한다.

그래서 start호출 -> 콜스택에 푸쉬 -> 콜스택에서 console.log('start')삭제 -> setTimeout실행 -> 이벤트루프로 인해 boo함수 테스트 큐에 임시 저장 -> foo()호출 -> 콜스택에 푸쉬 후 삭제
-> 콜스택이 비어있으니 이벤트루프가 테스크 큐에 저장되어 있던 boo함수 콜스택에 푸쉬 -> 리턴 후 콜스택에서 삭제





0개의 댓글

관련 채용 정보