1) Memory Heap: 복합 자료형(배열, 함수, 객체등)을 저장하는 메모리 공간
2) 호출 스택 (Call Stack): 코드 실행에 따라 호출 스택이 쌓이는 곳, 기본 자료형(숫자, 문자열, 불) 과 주소 등을 저장하는 메모리 공간
런타임은 특정 언어로 만든 프로그램들을 실행할 수 있는 환경이다
Node.js나 크롬등의 브라우저들은 자바스크립트가 구동되는 환경이기 때문에, 이를 자바스크립트 런타임이라고 한다. 자바스크립트 엔진 밖에서도 자바스크립트에 관여하는 요소들
1) Web API
- 브라우저에서 제공되는 API이다
- 자바스크립트 엔진에서 정의 되지 않았던 setTimeout이나 HTTP요청(ajax) 메소드, DOM 이벤트 등의 메소드를 지원한다
2) Task Queue
- 이벤트 발생 후 호출되어야 할 콜백 함수들이 기다리는 공간이다(이벤트 실행을 관리하기 위해 사용됨)
- 이벤트 루프가 정한 순서대로 줄을 서 있으므로 콜백 큐(Callback Queue)라고도 한다.
- 자바스크립트에서 비동기로 호출되는 함수들은 호출 스택(call stack)에 쌓이지 않고 태스크큐 (task queue)로 보내진다
3) Event Loop
- 이벤트 발생 시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정한다
- 레퍼런스 한다: 스택의 주소가 힙의 자료를 가리키는 것
- 러퍼런스 변수: 스택에 저장된 것 중에 주소가 저장된 변수
- 어떤 값이 메모리 어디 있는지를 알면 프로그램의 값을 조작할 수 있다
- const 일때 배열에 수정이 가능할때의 이유: 힙에 있는 레퍼런스된 복합 자료형을 조작하는것에는 문제가 없기 때문(쉽게-> 힙에서 원래있던 데이터에 수정하는건 문제가 없다)
- 파괴적 처리: 원본이 수정 가능
- 비파괴적 처리: 원본이 수정 불가능