# 참조

### 복제

**전자화된 시스템의 가장 중요한 특징은 복제다**

```javascript
var a = 1;
var b = a;
b = 2;
console.log(a); // 1
```

변수 b의 값에 변수 a의 값이 복제된 것이다 (\*\* 복제되었다고 값이 변하지 않는다 \*\*)

**연결되어 있지 않은 별도의 데이터**&#x20;

![](https://810537134-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MZh1fxUzW3zjggiSfv4%2F-M_GSCcBlViId5UQTmE0%2F-M_GTSPVSCv0RXoKIHgi%2Fimage.png?alt=media\&token=ebb66044-361d-4293-9808-72116a45160b)

### 참조

```javascript
var a = {'id':1};
var b = a;
b.id = 2;
// b = {'id':2} -> 결과값이 1로 바뀜 b에 새로운 데이 추가하는것이기때문
console.log(a.id);  // 2
//b에 담긴 프로포티값을 바꿔주면 a의 프로포티값도 변경된다.
```

![](https://810537134-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MZh1fxUzW3zjggiSfv4%2F-M_GVLBt1bFQvBEeksQh%2F-M_GVRYg0uaQYCH0d6r7%2Fimage.png?alt=media\&token=a5f3eb9f-fd12-4a78-9bf8-af89c2268ee8)

**참조는 똑같은 객체를 바라보게됨으로 a.id값이 -> 2 가 출력이된다.**&#x20;

### 함수

그럼 일종의 변수할당이라고 할 수 있는 메소드의 매개변수는 어떻게 동작하는가를 살펴보자.&#x20;

```javascript
var a = 1;
function func(b){
    b = 2;
}
func(a);
console.log(a); // 1
```

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

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

파라미터 b는 객체 a의 레퍼런스다. **이 값의 속성을 바꾸면 그 속성이 소속된 객체를 대상으로 수정작업을 한 것이 되기 때문에 b의 변경은 a에도 영향을 미치게 된다**.
