자바스크립트에서 객체를 할당받은 변수는 객체 그 자체가 아니라 객체를 참조하는 값을 저장한다.
무슨 말인지 하나도 모르겠으니까 일단 예시를 보자.
//객체 생성
var objA = {
var : 40
};
var objB = objA;
console.log(objA.val) // 40
console.log(objB.val) // 40
// objA 값을 할당받는 objB의 프로퍼티를 수정해봤다.
var objB = 50;
console.log(objA.val) // 50
console.log(objB.val) // 50
//나는 objB만 값을 바꿧는데 objA 바뀌어져 있다???
// 그 이유는 objA와 objB는 동일한 객체를 참조하고 있기 때문이다.
동등연산자(==)를 사용하여 두 객체를 객체를 비교할 때, 객체의 프로퍼티값이 아닌 참조값을 비교한다.
var a = 100;
var b = 100;
console.log(a == b); //true
// 기본타입을 비교할 때는 값을 비교한다.
// ( var a와 var b안에 들어가있는 값은 똑같이 100이니 true )
// 하지만 참조타입일 때는 이렇게 달라진다.
var objA = {value:100}
var objB = {value:100}
var objC = objB;
console.log(objA == objB) // false ( 각각 다른값을 참조하고 있다 )
console.log(objB == objC) // true (같은 값을 참조하고 있다. 자세한 설명은 예시그림을 보자)
참조에 의한 호출 방식
기본타입
- 값에 의한 호출 (Call By Value) 방식으로 동작.
- 함수를 호출할 때 인자로 기본타입의 값을 넘길 경우, 호출된 함수의 매개변수로 복사된 값이 전달된다.
참조타입(객체)
- 참조에 의한 호출(Call by Reference) 방식으로 동작.
- 함수를 호출할 때 인자로 참조 타입인 객체를 전달할 경우, 객체의 프로퍼티값이 함수의 매개변수로 복사되지 않고, 인자로 넘긴 객체의 참조값이 그대로 함수 내부로 전달된다.
이것도 뭔말인지 잘 모르겠으니까 예시를 함 보자.
var a = 100;
var objA = {value : 100};
function changeArg(num.obj){
num = 200;
obj.value = 200;
console.log(num);
console.log(obj);
}
changeArg(a,abjA);
// 값을 변경하는 함수를 호출하고
// 인자값으로 기본 타입인 숫자를 가진 변수 a와 참조타입인 객체 objA를 넘겨보니.....
console.log(a);
console.log(objA);
//changeArg() 결과값
200
{value : 200 } // 함수를 통해서 주어진 값이 변경됬다.
// 함수호출이 끝난 후의 a 와 objA
100 // 기본타입 : 함수의 영향을 받지 않았다.
{value : 200 } // 참조타입 : 함수의 영향을 받았다
'자바스크립트' 카테고리의 다른 글
배열(프로퍼티 생성,열거,삭제) (0) | 2021.07.02 |
---|---|
배열(표기법,메서드,객체와의 차이점) (0) | 2021.07.02 |
자바스크립트 데이터 타입 (0) | 2021.07.01 |
배열 추가,삭제 (0) | 2021.06.23 |
이벤트 심화(미완성) (0) | 2021.06.23 |