Written by
JJoo
on
on
객체지향 - 참조
복제
var a = 1;
var b = a;
b = 2;
console.log(a); // 1

복제할 데이터의 타입이 원시데이터타입일때 복제로 작동하게 된다.
참조
var a = {'id':1};
var b = a;
b.id = 2;
console.log(a.id); // 2

복제할 데이터가 객체타입이면 복제가 아닌 참조로 작동하게 된다.
하지만
var a = {'id':1};
var b = a;
b = {'id':2};
console.log(a.id); // 1
이렇게 객체를 할당해주게 되면 a.id에는 영향을 주지 않는다.
객체를 할당하면 b에 새로운 객체가 생성되기 때문에 a와 같은 객체를 바라보지 않고
새로 할당된 새로운 객체를 바라보게 되기때문에 a에 영향을 주지 않는다 .
함수와 참조
원시데이터를 인자로 넘겼을때(복제)
var a = 1;
function func(b){
b = 2;
}
func(a);
console.log(a);
결과 1
a=1 , b=a, b=2 이지만 b가 a에 영향을 주지 않기 때문에 a=1 이다.
객체를 인자로 넘겼을 때(참조)
var a = {'id':1};
function func(b){
b = {'id':2};
}
func(a);
console.log(a.id); // 1
결과 1
a={id:1}; b=a; b={id:2};
a={id:1}; b=a; : b와 a는 같은 객체를 가리키고 있는 상태이지만
b={id:2}; : 이부분으로 인해서 b는 a와의 관계가 끊기고 새로운 객체를 가리키게 된다.
var a = {'id':1};
function func(b){
b.id = 2;
}
func(a);
console.log(a.id); // 2
결과 2
a={id:1}; b=a; b.id=2; a.id=2;
a={id:1}; b=a; : a와 b는 같은 객체를 가리키고 있는 상태
b.id=2; : b의 id가 수정이 되면서 같은 객체를 가리키고 있는 a도 영향을 받게 된다.
Discussion and feedback