let x = 2;
let y = x;
// 변수 x 를 변수 y에 할당하는 경우 변수 x의 값이 원시자료형이기때문에 x의 값이었던 2를 y에 복사하여 할당하고
y = 3;
// y에 3이 할당되어도 x의 값은 여전히 2. x의 값을 y로 복사하여 할당했기때문
let x = { foo: 3 };
let y = x; // x의 값은 {foo:3}의 주소를 y에 할당한다
y.foo = 2;
//x.foo 는 2 가 출력된다. 같은 **주소**를 바라보고 있기때문
그럼 아래에서 x.foo는 어떨까
let x = { foo: 3 };
let y = x; //y는 x의 주소값을 할당받았지만
y = 2; // 다시 2를 할당받았기때문에
//x.foo는 3이 그대로 있게 됨
함수에서 원시자료형과 참조자료형을 보자
let score = 80;
function doStuff(value) {//매개변수 value에 score의 값 80이 전달되고
value = 90; //value에 90이 할당
}
doStuff(score)
//원시자료형이므로 값자체를 복사하여 전달하게되고 함수에서 어떤일이 발생했던가와 상관없이 score의 값은 80
let player = { score: 3 };
function doStuff(obj) { //매개변수에 {score:3}이 들어있는 주소값이 할당됨
obj.score = 2; obj와 player 는 같은 주소값을 가지고 있음
}
doStuff(player); //따라서 player.score의 값도2가 됨