공부 및 일상기록

[Javascript] passed by value, passed by reference 본문

개발/Javascript

[Javascript] passed by value, passed by reference

낚시하고싶어요 2023. 1. 15. 23:45

passed by value

인자로 넘기는 값을 복사해서 새로운 함수에 전달하는 방식

값에 의한 호출은 원본값이 변경될 가능성은 없지만, 고비용과 메모리의 문제점이 있다.

let a = 1;
let b = a;
console.log(a, b) // 1  1
console.log(a===b) //true

a=10;
console.log(a,b) //10 1

변수 a는 원시타입인 숫자 1을 할당했고, 원시타입은 불변성이 유지되어 b에 a를 할당하면 새로운 메모리에 1이 저장된다.

 

passed by reference

주소값을 인자로 전달하는 방식

참조에 의한 호출은 원본값의 변경이 일어날 수도 있다는 문제점이 있다.

const obj = { a: "apple" };
const test = obj;
test.a = "peach";
console.log(obj); // { a : 'peach' }

분명 const로 obj를 선언하였고 test에 obj를 할당한 후 test의 a를 peach로 변경했음에도 obj 역시 peach로 변경되었다.

그 이유는 복사하여 값을 전달하면서 값 자체가 아닌 값이 있는 주소를 복사하여 넘겼기 때문이다.

따라서 test의 a와 obj의 a는 값이 아닌 참조하고있는 주소값이 있는것이다. 따라서 주소를 변경한 것은 아니고 해당 주소에 있는 값이 변했으므로 obj는 변한적이 없지만 obj내부의 a의 값이 바뀌어 버린 것이다.