참조

복제

데이터가 원시데이터 타입일 때. 아래 코드에서 a와 b는 연결되지 않은 별도의 분리된 데이터이다.

var a = 1;
var b = a;//a의 값을 복제한다.
b = 2;//b에 새로운 데이터를 할당한다.
console.log(a);//a의 값은 변함없이 1이다.

참조

데이터가 객체일 때, 위의 코드처럼 작성해보면 원래 객체 데이터의 값이 바뀌는 것을 알 수 있다.마치 포인터와 같다. 실제 윈도우 운영체제에서 바로가기 아이콘 링크가 동작하는 원리와 같다.

var a = {'id':1};
var b = a;//a의 값을 참조한다.
b.id = 2;
console.log(a.id);//2.

아래의 코드에서 변수 b에 새로운 객체를 생성함으로써 a와 b는 별개의 변수가 된다.

var a = {'id':1};
var b = a;//a의 값을 참한다.
b = {
    'id':2};//b는 새로운 객체를 생성하였다.
console.log(a.id);//a의 값은 아무런 영향을 받지 않은 채 그대로 1이다.

함수와 참조

=> 객체를 생성하여 할당하는 것과 '.'으로 접근하여 값을 조작하는 것을 구분하자.

참조 데이터 타입을 인자로 넘겼을 때 동작하는 코드이다.

생코님 설명. b = a .???b=a가 아니라 a={'id':2} 가 되는 것 아닌가?!

func 함수 내에서 매개변수 b에 새로운 객체를 생성하고, 이것을 b에 할당한다. b는 새로운 객체를 바라보고 있고, 이로써 a와 b의 관계는 끊기게 된다.

var a = {'id':1};
function func(b) {
    b = {'id':2};
}
func(a);
console.log(a.id);//1

Last updated