본 내용은 프로그래머스의 코딩테스트 광탈 방지 A to Z : JavaScript 강의를 토대로 작성하였습니다.
1. JS 변수 선언 과정
- 변수 고유 식별자 생성
- 메모리에 주소 할당
- 생성한 주소에 값을 넣음
2. 특징
- 선언한 상수나 변수는 메모리 주소를 바라봄
- 새로운 변수에 기존 변수를 대입하면
- 값이라면, 기존 변수의 메모리 주소를 참조
- 기존 변수에 조작(변경)이 일어나면, 새로운 메모리 주소를 할당 받고 그것의 값을 넣게 됨
- 원시타입은 변경이 불가능하기 때문
- 원시타입의 값이 변경될 때는 새로운 메모리가 할당 됨
3. 가상 머신
- Virtual Machine
- 자바스크립트 엔진은 가상 머신으로 구성되어 있음
- 메모리 모델이 구현되어 있음
- Heap, Call Stack
Heap & Call Stack
- Heap: 참조 타입
- 배열, 객체
- 동적으로 크기가 변함
- 배열에 값을 추가하면, 그대로 할당 됨(배열을 상수로 선언해도 값이 추가 가능한 이유)
- Call Stack: 원시 타입
- 스택처럼 하나씩 쌓임
- Call Stack에 선언된 배열 변수는 Heap에서 생성된 배열의 메모리 주소를 참조
- 상수이어도, push가 동작하는 이유는 Call Stack에 할당된 메모리를 변경하는 것이 아닌 Heap 메모리를 변경하는 것이기 때문
Garbage Collector
- 사용을 마친 메모리는 Garbage Collector가 정리 함
- 현대적인 브라우저의 GC는 Mark And Sweep Algorithm으로 동작
- Mark And Sweep Algorithm
- 브라우저의 최상위 객체인 윈도우에서 시작하여, 닿을 수 없는 곳은 필요 없는 주소라 가정하고 지움
- 메모리에 저장된 값이 아무도 참조하지 않으면 GC가 삭제
Reference
'programming study > JavaScript' 카테고리의 다른 글
기초 JS, CS 상식 - 흐름 제어 (0) | 2022.11.16 |
---|---|
기초 JS, CS 상식 - 표현식과 연산자 (0) | 2022.10.06 |
[프로그래머스] 성격 유형 검사하기 - JavaScript 풀이 (0) | 2022.09.24 |
Vue.js - 라우터 네비게이션 가드 (0) | 2022.06.09 |
조건부 렌더링 (0) | 2022.06.02 |