반응형
0. 용어 정리
- 런타임 : 소스코드가 순차적으로 실행되는 시점
- 호이스팅 : 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트의 특징
- 재할당 : 이미 값이 할당되어 있는 변수에 새로운 값을 또다시 할당하는 것
- 가비지 콜렉터 : 애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리를 해제하는 기능. 더 이상 사용되지 않는 메모리란, 어떤 식별자도 참조하지 않는 메모리 공간을 의미. 자바스크립트는 가비지 콜렉터를 내장하고 있는 매니지드 언어로서 가비지 콜렉터를 통해 메모리 누수(memeory leak)을 방지한다.
- 매니지드 언어 : 메모리의 할당 및 해제를 위한 메모리 관리 기능을 언어 자체가 담당한다. 개발자의 직접적인 메모리 제어가 불허된다. 개
- 언매니지드 언어 : 개발자가 명시적으로 메모리를 할당, 제어, 주도할 수 있다.
1. 변수 선언과 값 할당의 실행 시점
변수 선언 : 런타임 이전에 실행
값 할당 : 런타임에 실행
(변수 선언만 아니라 var, let, const, function, function*, class 키워드를 사용해서 선언하는 모든 식별자는 호이스팅된다)
2. 값의 재할당
이미 값이 할당되어 있는 변수에 새로운 값을 또다시 할당하는 것.
var score = 80;
score = 90;
var 키워드로 선언한 변수는 선언과 동시에 undefined로 초기화되기 때문에 엄밀히 말하자면 변수에 처음으로 값을 할당하는 것도 사실은 재할당이다
var score = 80; // -> 여기서 이미 undefined에서 80으로 값이 재할당되었다.
score = 90;
변수에 값을 재할당하면(80 -> 90 부분)
=> score 변수 앖은 80에서 90으로 재할당된다
메모리 공간은 어떻게 반응할까?
- 80이 저장되어 있던 메모리 공간을 지우고 90으로 변경한다
- 80이 저장되어 있던 메모리는 그대로 두고 90을 저장하는 메모리 공간을 새로 만든다 ⭐
정답은 2번입니다!! 재밌죠?
3. 그렇다면...
- 현재 score 변수의 값은 90이다
- 전에 할당된 변수의 값 80이 메모리 공간에 존재한다
- 그 ~ 전에 할당된(선언 시점에 할당된) 값 undefined가 메모리 공간에 존재한다.
하지만 변수에 값을 재할당 한 지금. 2번과 3번은 필요 없는 값이 된다.
이러한 불필요한 값들은 가비지 콜렉터에 의해 메모리에서 자동 해제된다.
단, 언제 해제될지는 예측할 수 없다
반응형
'✍ 공부 > JavaScript' 카테고리의 다른 글
[ 모던 자바스크립트 Deep Dive ] 쉼표 연산자 (0) | 2022.12.25 |
---|---|
[ 모던 자바스크립트 Deep Dive ] 동등/일치 비교 연산자 (0) | 2022.12.25 |
[ 모던 자바스크립트 Deep Dive ] 들어가며 (0) | 2022.12.25 |
(JavaScript) 자바스크립트 async / await / promise (0) | 2022.06.12 |
이벤트 제어하기. 쓰로틀링(throttling)과 디바운싱(debouncing) (0) | 2022.06.12 |