javascript

call by value란?

노엠디엔 2022. 12. 1. 18:32

 자바스크립트에서 call by value란 변수나 객체 등이 함수의 인자(argument)로 들어와 매개변수(parameter)로 전달될 때 어떤 방식으로 전달될지를 결정하는 방식이다.

 

크게 두가지 방식이 있다고 한다.

  • Call by value(값에 의한 호출, 값의 복사)
  • Call by reference(참조에 의한 호출, 주소의 복사)

일반적으로 기본형(원시형)을 매개변수로 넘길 때는 Call by value 방식으로 넘기고

참조형을 매개변수로 넘길 때는 Call by reference 방식으로 넘긴다.

기본형(원시형) : 숫자, 문자열, 불리언, null, undefiend, 심벌

참조형 : 객체, 배열, 함수, 날짜, 정규표현식

 

 

Call by value(값에 의한 호출, 값의 복사)

Call by value(값의 복사)는 말 그대로 복사된 값을 인자로 넘겨서 매개변수로 전달한다.

기본형(Primitive type)의 경우 call by value 방식으로 전달된다.

  1. arguments로 이 넘어온다.
  2. 값이 넘어올 때 복사된 값이 넘어온다.
  3. caller(호출하는 쪽)가 인자를 복사해서 넘겨줬으므로 callee(호출당한 쪽)에서 해당 인자를 지지고 볶아도 caller는 영향을 받지 않는다.

 

call by value

 

Call by reference(참조에 의한 호출, 주소의 복사)

call by reference(주소 값의 복사)는 실제 데이터가 존재하는 주소를 가리키는 주소 값을 인자로 넘겨서 매개변수로 전달한다.

객체(ex. obj, array, function...)는 call by reference 방식으로 전달된다.

  1. arguments로 **reference(값에 대한 참조 주소, 메모리 주소를 담고 있는 변수)**를 넘겨준다.
  2. reference를 넘기다 보니 해당 reference가 가리기는 값을 복사하지는 않는다.
  3. caller(호출하는 녀석)가 인자를 복사해서 넘기지 않았으므로 callee(호출당한 녀석)에서 해당 인자를 지지고 볶으면 caller는 영향을 받는다.

call by value

자바스크립트는 해당과 같이 참조값을 인자로 넘겨주게 되면

call by reference가 동작한다고 오해를 하고 있다고 한다!

 

Call by Sharing

call by Sharing

 자바스크립트에서는 무조건 call by value로 작동한다고 한다.
사람들이 참조 타입을 넘기면 call by reference로 작동한다고 알고 있고, 위 사진이 그 생각이 오해임을 명백하게 밝혀주고 있다.
자바스크립트에서는 참조 타입을 인자로 넘기면 참조값에 대한 복사본을 만들어서 넘긴다.

중요!

  1. 자바스크립트에서 call by reference는 존재하지 않고 call by value만 존재한다.
  2. 참조 타입을 인자로 넘기면 참조값에 대한 복사본이 넘어간다.
  3. 이러한 혼동을 줄이고자 call by sharing이란 용어로 부르기도 한다.

출처:https://perfectacle.github.io/2017/10/30/js-014-call-by-value-vs-call-by-reference/

'javascript' 카테고리의 다른 글

비동기와 Promise  (0) 2022.12.13
Prototype 프로토타입  (0) 2022.12.04
유사배열  (0) 2022.12.01
var 와 let 과 const 블록레벨 스코프  (0) 2022.11.26
스코프  (0) 2022.11.26