December 08, 2020
그 외 object, array, function 모두 객체
함수 호출 시 메모리에 함수를 위한 임시 공간이 생긴다.
함수 호출 시 전달받은 인자 값을 복사한다.
인자 값이 복사 됐기 떄문에 전달된 인자 값과 전달 받은 파라미터 주소 값은 다르다.
let a = 10;
function multiply(num){
num = num * 10;
};
multiply(a);
console.log(a) //10
변수 a
는 Number 원시 자료형이다.
multiply
함수를 통해서 a값을 10배로 곱해 주려고 인자로 전달했지만 결과는 ‘10’ 그대로이다.
값에 의한 호출이 일어났기 때문에
num의 값 !== a의 값
즉, 함수 인자 전달시 주소 값이 복사 됐기 때문에 원본 값에는 영향을 미치지 않는다.
let obj = {a:1};
let newObj = obj;
console.log(obj === newObj); //true
newObj = {b:1};
console.log(obj === newObj); //false
obj
를 newObj
에 할당obj === newObj
둘 모두 같은 주소값을 가졌기 떄문에 같은 객체로 인식newObj
값을 재할당obj !== newObj
newObj에 값이 재할당됨으로서 주소값의 변경이 일어남 이제 둘은 같은 객체로 볼 수 없다.let a = {b:10};
function multiply(obj){
obj.b = obj.b * 100;
};
multiply(a);
console.log(a) //{b:1000}
a
변수에 {b:10}
할당multiply
함수에 a
를 인자로 전달obj === a
obj.b
속성에 값 재할당obj
와 같은 주소 값을 바라보던 a
의 속성도 변경됨. a = {b:1000}
//속성 값만 변경된 경우
const obj = {
innerObj: {
x: 9
}
};
const z = obj.innerObj;
z.x = 25; //obj.innerObj === z의 주소값은 같은 상태에서 값만 재할당이 일어남으로서 둘다 값이 변경됨.
console.log(obj.innerObj.x); //25 obj.innerObj === z
//재할당이 일어난 경우
const obj = {
arr: [{ x: 17 }]
};
let z = obj.arr;
z = [{ x: 25 }]; // z 값의 주소값이 변경됨으로서 z !== obj.arr
console.log(obj.arr[0].x); //17 obj.arr !== z