<참조>
var a = {‘num’ : 1};
var b = a;
b.num = 2;
console.log(a.num);
> 2
위 코드에서 변수 a는 {‘num’ : 1};을 통해 새로운 객체를 생성하여 그를 가리키고 있고, 변수 b는 그런 a를 참조한다. 이 상태는 a와 b가 서로 같은 객체 num : 1을 가리키는 형태이다. 이때, b를 통해 속성 값을 바꾸면 b가 가리키는 객체의 값을 바꾸게 되는데, 이때 바뀐 객체는 a또한 참조하고 있는 객체였기에 a.num도 값이 바뀐다. 하지만 아래 코드는 얘기가 달라진다.
var a = {‘num’ : 1};
var b = a;
var b = {‘num’ : 2};
console.log(a.num);
> 1
a변수는 num : 1이라는 객체를 참조하고 b또한 그런 a를 참조했지만, 3행에서 b에게 새로운 객체를 생성해 이를 참조하게 한 것이다. 하여 a의 속성을 출력해도 원형인 1을 출력하게 된 것이다. 이처럼 새로운 객체를 생성하는 것은 a의 속성에 영향을 끼치지 않는다.
</참조> // 변수에 담긴 값이 객체일 경우 참조
<복제>
var a = 1;
var b = a;
var b = 2;
console.log(a)
> 1
위 코드에서 a는 1을 가리키고, 2행을 실행했을 때 b는 a의 값인 1을 “복제”한다. 하여 b의 값을 변화시켜도 a와 b는 서로 다른 값을 갖고 있었기에 서로에게 영향을 끼치지 않는다.
</복제>
// 변수에 담긴 값이 원시 데이터일 경우 복제
'프로그래밍 언어 > Script' 카테고리의 다른 글
JAVA script 레퍼 객체 (0) | 2022.12.13 |
---|---|
JAVA script 원시 데이터 타입 (0) | 2022.12.13 |
JAVA script hasOwnProperty (0) | 2022.12.13 |
JAVA script 표준 내장 객체 종류 (0) | 2022.12.13 |
JAVA script prototype (0) | 2022.12.13 |