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