
코어자바스크립트 ch1. 데이터 타입을 읽고 제 생각과 함께 정리한 내용입니다.
변수와 상수의 차이: 변경 가능성
변경 가능성 판단: 변수 영역 메모리
불변성 여부 판단: 데이터 영역 메모리
변경 가능성과 불변성은 무슨 차이가 있을까?
또, 이것들을 어떻게 판단할까?
let a = 3 이라고 했을 때, a에 5를 재할당하는 것은 가능하다. 이건 불변성이 깨지는 것 아닌가?a에 대한 불변성을 생각함데이터가 불변값이라는 것이다.

JS에서는 변수영역에 주소값을 저장한다고 했다. 그럼 swap은 어떻게 일어날까?
let a = 10;
let b = 20;
let temp = a;
a = b;
b = temp;
console.log(a, b);
20 10
값을 재할당할 때마다 주소값을 변경하여 swap이 일어나게 한다.
변수가 가리키는 주솟값이 변경되는 것이기 때문에 원본 데이터의 불변성은 지켜진다.
let a = 10;
let b = 20;
const swap = (a, b) => {
let temp = a;
a = b;
b = temp;
return a, b;
};
swap(a, b);
console.log(a, b);
10 20
변경되지 않는다! a, b는 지역변수이기 때문에 그렇다고 한다.
복사된 값이다.함수를 쓰면서 swap을 하려면 어떻게 해야할까?
참조형을 쓴다면?
참조형은 가변값이기 때문에 객체 내부의 프로퍼티를 변경하면 원본값도 변경된다.
let obj = { a: 10, b: 20 };
const swap = (obj) => {
let temp = obj.a;
obj.a = obj.b;
obj.b = temp;
};
swap(obj);
console.log(obj.a, obj.b);
20 10
어찌됐건 참조형 데이터도 불변이 아닌가?
주소값을 가리킨다는 점에서, 데이터 측면에서는 둘다 불변인데 왜일까? 라는 고민을 했다.
참조형 객체의 내부 프로퍼티가 가변이라고 할 수 있다.
참조형 데이터가 ‘복사’된 상황에서 가변이라는 상황이 생길 수 있다.
복사한 값의 프로퍼티를 변경하면 원본의 프로퍼티도 변경된다. 이는 자기도 모르게 ‘가변’ 된 것이다.
불변성을 확보하지 못한 것이다.
var a = 10;
var b = a;
b는 a의 주소를 참조할 것이라고 예상했으나, a가 가리키고 있는 주소값을 참조함. 즉, a가 참조하고 있는 값을 같이 참조함
왜 a의 주솟값 자체를 참조하지 않을까?
기본형 데이터이기 때문에 값이다. 따라서 순회한다.let과 const에 대해서는 undefined를 할당하지 않은 채로 초기화를 마치며, 특정 값을 할당하기 전까지는 해당 변수에 접근할 수 없다.

undefined를 할당하지 않은 채 초기화를 마친다고 한다. 그럼 아예 접근 불가? 그럼 뭐가 뜨는거지?
undefined 할당한 거 아닌가?
x는 undefined로 초기화된 게 아님
자바스크립트 엔진이 반환하는 값일 뿐이다.