[JS] const로 선언한 배열, 객체의 값을 수정할 수 있는 이유

송재민·2024년 2월 22일
0

자바스크립트에서 const로 선언한 경우 값을 선언할 수 없다고 하는데, const로 선언한 참조 타입의 값의 경우엔 값을 수정할 수 있다.

이는 자바스크립트 엔진의 메모리 구조를 통해 이해할 수 있다.

이미지 출처

위 이미지는 C언어의 메모리 구조이다.
Stack 영역에는 로컬 변수와 함수(호출 되었을 때)가 저장되고, Heap 영역에는 동적으로 할당되는 것들이 저장된다.

자바스크립트 엔진의 메모리 구조도 이와 비슷하다.

이미지 출처

위 이미지는 구글 크롬에 탑재된 V8 자바스크립트 엔진의 메모리 구조로, 원시 타입의 경우 stack 영역에 값 자체가 저장된다. const로 선언된 원시 타입의 경우 다른 stack의 다른 주소를 가리킬 수 없다.

하지만 참조 타입의 경우 stack에는 주소값이 할당되며, 실제 값은 heap 영역에 저장되기 때문에 const로 선언해도 값을 저장할 수 있는 것이다.

profile
Software Engineer @Samsung Heavy Industries

0개의 댓글