세모이
개발 계발
세모이
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • 알고리즘 (1)
    • 자바스크립트 (29)
    • 리액트 (10)
    • HTML&CSS (2)
    • TIL (26)
    • 파이썬 (8)
    • Dev (1)
    • 데일리 (3)
      • 2023 (3)
      • 2025 (0)
    • 에러일기 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바스크립트
  • 개발자 도구 Network
  • 옵셔널 체이닝
  • 자바스크립트 생성자 함수에 의한 객체 생성
  • 모던 자바스크립트
  • 자바스크립트 함수와 일급 객체
  • html 신기한 태그
  • 모던 자바스크립트 deep dive
  • 자바스크립트 깊은 복사 얕은 복사
  • const let 키워드와 블록레벨 스코프
  • 자바스크립트 빌트인 객체
  • &&연산자
  • 자바스크립트 strict mode
  • 자바스크립트 프로토타입
  • 리액트 key
  • 함수
  • 자바스크립트 전역 변수의 문제점
  • 시멘틱 태그
  • 자바스크립트 프로퍼티 어트리뷰트
  • 모던 자바스크립트 deep deive

최근 댓글

최근 글

티스토리

반응형
hELLO · Designed By 정상우.
세모이

개발 계발

자바스크립트

자바스크립트 동작 원리

2022. 4. 20. 15:46
반응형

자바스크립트는 동기적이고 단일 스레드 언어다. 즉 한번에 하나의 작업만 진행할 수 있다.

하지만 자바스크립트의 구동 환경의 특성으로 인해 자바스크립트에서도 비동기가 일어난다.

Memory Heap - 변수와 객체의 메모리 할당을 담당하는 곳

Call Stack - 함수가 호출이 되면 쌓이는 곳. 함수가 쌓이는 순서와는 반대로 실행

Web APIs - 브라우저에서 제공하는 APIs.
자바스크립트(JavaScript) 코드를 사용하여 접근할 수 있으며 window나 element에 대한 간단한 작업에서부터 WebGL이나 Web Audio와 같은 API를 사용해 복잡한 그래픽 및 오디오 효과를 만들어내는 것까지 가능

Event Loop - call stack이 비어있을 경우 callback queue에서 함수를 꺼내 call stack에 추가하는 Loop.

Callback queue - 콜백 함수들이 대기하는 곳(FIFO 선입선출)



위 그림은 자바스크립트가 작동하는 환경으로 '코드가 실행되는 싱글스레드의 콜스택이 있는 자바스크립트 엔진 + web APIs + 콜백큐 + 이벤트 루프'이 네가지로 이루어져 있다.

 

1. 콜 스택에서 코드가 하나씩 동기적으로 순서대로 처리되는 와중에 브라우저가 제공하는 API(setTimeout)이나 네트워크 통신(ajax) 같이 시간이 오래 걸리는 코드들은 처리하지 않고 web APIs로 빼둔다.
2. 콜스택의 코드들의 작업이 모두 끝나고 지워져 콜 스택이 텅텅 비게 된다.
3. webAPIs에 모인 코드들의 작업이 끝나면 콜백함수들을 콜백큐에 넣는다.
4. 이벤트 루프가 콜백큐의 콜백함수들을 콜스택에 하나씩 넣어서 콜백함수들의 결과값을 반환한다.




console.log(1);
setTimeout(function(){console.log(2)},1000);
console.log(3);

위의 예제로 예를 들자면

1. 자바스크립트는 코드를 한줄 씩 실행
2. 콜 스택에 console.log(1) 코드가 실행되고 사라진다.
3. 2번째 줄인 setTimeout을 실행하는데 setTimeout함수는 자바스크립트 엔진이 처리하지않고 Web API가 처리하므로 Callback함수를 전달하고, setTimeout작업을 요청한다. 그리고 콜 스택에서 사라진다.
4. console.log(3) 코드가 실행 되고 사라진다.
이 때 주의할 점은 console.log(3)이 사라지고 WebAPIs에 있던 작업이 콜백 큐로 전달되는 것이 아니라 별개로 진행 되고 전달한다
5. 이벤트 루프는 콜 스택이 비어있음을 확인하고 콜백 큐에 있던 setTimeout 콜백 함수를 콜 스택으로 추가한다.
6. 콜백 함수가 콜 스택에서 실행되고 사라진다.

반응형

'자바스크립트' 카테고리의 다른 글

[자바스크립트] this  (0) 2022.04.28
[자바스크립트] 프로토타입 쉽게 이해하기  (0) 2022.04.23
[자바스크립트] 옵셔널 체이닝  (0) 2022.03.28
[자바스크립트] Promise  (0) 2022.02.06
[자바스크립트] this  (0) 2021.12.14
    '자바스크립트' 카테고리의 다른 글
    • [자바스크립트] this
    • [자바스크립트] 프로토타입 쉽게 이해하기
    • [자바스크립트] 옵셔널 체이닝
    • [자바스크립트] Promise
    세모이
    세모이
    개발 공부!

    티스토리툴바