호출방식

ddalkigum·2022년 7월 28일
0

TIL

목록 보기
50/50
post-thumbnail

함수에서 인자를 호출하는 방식에 관한 내용이다

call by value
call by reference

파라미터를 원시타입으로 넣을 경우
call by value

객체 형태의 경우
call by reference

이렇게 이해를 했다


const a = { hi: 'hi', name: 'name' }

const callByReference = (obj) => {
  obj.name = '';
  return obj;
}

const result = callByReference(a)
>> { hi: 'hi', name: '' }

a
>> { hi: 'hi', name: '' }

result === a
>> true
const b = 'hi'

const callByValue = (str) => {
  str = 'bye'
  return str
}

const result = callByValue(b)
>> 'bye'

b
>> 'hi'

result === b 
>> false 

callByReference라는 함수에서는 Object형태의 값을 파라미터로 사용한 케이스이고
callByValue라는 함수는 원시타입을 파라미터로 사용한 케이스이다

callByReference의 경우 주소값이 동일하기에
비교를 해보면 true가 나오는 것을 확인할 수 있다

반면에 callByValue라는 함수를 보면
주소값을 복사해서 할당하는 것이 아닌 새로운 주소에 재할당을 한다고 생각하면 된다
그렇기에 비교를 해보면 false가 나오는 것을 확인할 수 있다

깊은 복사와 얕은 복사와 같은 개념이구나 생각했다

계속 찾아보면서 느낀건 자바스크립트는 기존의 언어와는 다른 방식이구나 라고 생각이 들었고
그 이유는 자바스크립트에서는 callByReference가 아닌 callBySharing이라는 개념을 가지고 있다는 것이다

이전과 비슷한 예시를 보면


const c = { hi: 'hi', name: 'name' }

const callBySharing = (obj) => {
	obj = { hi: 'hi' }  
  return obj
}

const result = callBySharing(c);
>> { hi: 'hi' }

c
>> { hi: 'hi', name: 'name' }

result === c
>> false

아까와 다른점은 재할당을 했느냐, 기존 값의 내부값을 변경했느냐 이다

callByReference로 동작을 했다면 c의 값이 { hi: 'hi' }가 나왔어야 한다
하지만 이렇게 동작하지 않는 다는 걸 확인할 수 있고

이렇게 찾아보다 나온 것이 callBySharing이다
기존의 참조방식과는 다른 참조 방식을 사용하는 것이다

아무튼 기존의 방식과는 다르기에 새로운 용어를 사용한다 정도로 이해하면 될 것 같다

profile
딸기검 -본캐🐒 , 김준형 - 현실 본캐 🐒

0개의 댓글