자바스크립트 동작원리

  • 웹브라우저(Chrome, IE, Firfox, Mozilla 등)는 자바스크립트를 실행시켜주는 엔진
  • 웹 브라우저 내부에는 코드를 실행시켜주는 스택이라는 공간이 있음 스택은 하나만 있음
    그래서 한번에 하나의 코드만 실행 -> 자바스크립트는 Single Threaded Language라고 부름!
  • console.log(1+1);
    setTimeout(function() { console.log(2+2); }, 100);
    console.log(3+3);
    
    위 예제에서 setTimeout은 바로 실행하는 함수가 아님
    이런것들은 스택에 집어넣어서 실행하지 않고 잠깐 대기실(?)에 빼놓고 실행한다고 보면됨
    content07
    대기실에 보내는 코드들은 정해져 있음
    Ajax 요청코드, 이벤트리스너, setTimeout 등
  • SetTimeout같은 코드들이 실행할 시점이 되면 Callback 큐, Event큐라고 부르는 대기실로 옮겨서 줄을 세운다
    그다음 이 대기실에서 스택으로 한줄씩 올려보낸다.
    content08
    하지만 무조건 큐에 있는것들이 스택으로 보내지는게 아니라 스택이 비어있을때만 옮겨질 수 있다.
  • console.log(1+1);
    setTimeout(function(){ console.log(2+2); }, 0); // 0초후 2+2연산 실행 후 출력
    console.log(3+3);
    

    위 코드 실행하면 2 -> 6 -> 4 순으로 출력됨
    setTimeout의 경우 0초가 걸려도 대기실을 거친뒤에 실행됨!

  • 자바스크립트는 동기적으로 처리된다.(한번에 한줄씩 순서대로)
    그런데 setTimeout, 이벤트리스너, ajax함수같은걸 쓰면 가끔 비동기적처리도 가능하다.
    (오래걸리는 코드들은 (대기실로) 재껴주고 빨리 되는거먼저 처리함)

참조(코딩애플_자바스크립트동작원리)