본문 바로가기
Development (국비 복습 )/JavaScript

Javascript reference

by Puddingforever 2023. 2. 19.
Primitives Objects : reference type 
number
boolean
String
null
undefined
object
function
date
regex
array

 

a==b는 true가 나오고 c==d는 false

위를 보면 c==d는 false가 출력된다, 이는 c와 d가 object 타입이기 때문에 각각 다른 레퍼랜스를 가지고 있기 때문이다.

primitive 타입의 경우, 변수에 값이 저장되면 그 변수안으로 바로 저장이 된다.

반면에 object 타입의 경우, 변수 값을 어느 공간으로 이동시켜주고, 거기에 주소값을 준다.

이 주소를 reference라고 하며, value가 저장되어 있는 공간을 메모리라고 한다.

 



primitive : 값을 그대로 변수에 넣어준다. 
const name = "pudding";
name -------------> pudding

object : 새로운 공간을 만들어서, 메모리 주소를 저장해준다.
const country = {}
country --------> 12345

즉, object의 경우, 값이 담길 새로운 공간(메모리)를 만들어서 주소를  할당해준다. address == reference(주소 ! 라고 생각하자 ) 


function incrementAge(age){
age = age + 1;
}
const myAge = 10;
incrementAge(myAge);
= 10



myAge는 primitiv 이기 때문에 값(value) 그 자체만 전달해주고, 
myAge라는 변수자체를 전달해주지 않는다.

copy by value not reference

function incrementAge(user){
user.age = user.age + 1;
}

const me ={age : 10};

incrementAge(me);



reference인 me라는 객체 자체를 incrementAge에 보내는거기 떄문에 
11이 된다.

object is passed as reference 



예시 1) primitive type

const a = 1;
const b = a;

//a = 1
//b = 1

 

let a =1;
let b =a;

//a=1
//b=1
 
a=7
//b=1 b는 a라는 객체값을 아직 전달 받지 못햇기 떄문, 위에는 전달을 받고난 후에 출력한거

 

2) reference

let a = {name: "pudding"}
let b = a; // a라는 레퍼랜스를 아예 가져옴 

//a => {name: "pudding"}
//b => {name: "pudding"}

a.name = "queen";


//a => {name: "queen"}
//b => {name: "queen"} 레퍼랜스 주소 자체를 다 가져와서 같이 변한다.


a = {name : "nala"}

//a= > nala
//b => queen a가 또 다른 레퍼랜스를 새로 만들었기 때문에 b는 여전히 queen이다.

댓글