자바스크립트의 자료형 (문자, 숫자, array, object 등)은 크게 Primitive & reference 두가지 타입으로 분류된다. Primitive data type은 자료 자체가 변수에 저장되는 자료이다. 문자, 숫자 자료형들이 대표적인 primitive data type이다.
reference data type은 자료를 변수에 직접 저장하는게 아닌,
자료가 저장된 위치를 알려주는 레퍼런스를 변수에 저장한다.
Array, Object 자료형은 reference data type에 속한다.
//prmitive 자료형
var name1 = '김';
var name2 = name1;
name1 = '박'
console.log(name1); // '박' 출력
console.log(name2); // '김' 출력
Primitive 자료형은 위의 예제처럼 변수2에 변수1를 대입 후, 변수1의 값을 변경하면 변수1의 값만 변경되고 이미 복사된 변수2의 값은 변경되지 않는다.
//reference 자료형
var name1 = { name : 'kim' };
var name2 = name1;
name1.name = 'park';
console.log(name1); // { name : park } 출력
console.log(name2); // { name : park } 출력

Reference 타입 자료형은 해당값이 저장된 위치(reference)가 저장되어 있기 때문에 등호로 변수를 복제할 경우, 같은 값을 가르키고 있으므로 값 공유가 일어난다.
var name1 = { name : 'kim' };
var name2 = { name : 'kim' };
console.log(name1 === name2) //false

reference 타입 자료형은 변수에 할당된 값이 같더라도 각각의 reference가 다르므로, 자료형 비교시 false가 출력된다.
var name1 = { name : '김' };
function test(obj){
obj = { name : 'park' }; //오브젝트를 재할당 해주는 함수
}
test(name1); // 기존 값 '김' 출력
값을 재할당 해주는 함수를 만들어 함수를 실행시켜주면, 재할당된 값이 출력되지 않고 기존값이 그대로 출력된다. 파라미터 문법은 일종의 변수를 만드는 문법이고, 거기에 '새로운 레퍼런스를 생성해주겠습니다.'다는 의미이기 때문이다.
// 예 - 자바스크립트의 시점
var name1 = { name : '김' };
function test(obj){
var obj = { name : 'park' }; //변수 obj의 새로운 reference 생성
}
test(var obj = name1); // obj = name1 이기때문에 name1과 값공유