call by value과 call by reference

Front_H·2020년 10월 15일

javascript

목록 보기
3/5
post-thumbnail

변수에 대해 공부를 하다가 call by reference라는 용어를 접하게 되었다.

우선적으로 call by~~가 무엇이냐..

'평가전략(Evaluation Strategy)'중의 하나이며 위키피디아에서 정의하기를
프로그래밍 언어에서 함수 호출의 아규먼트(argument)의 순서를 언제 결정하고 함수에 어떤 종류의 값을 통과시킬지 결정하는 것
이라 말하고 있다.

즉 함수에 인수로 뭘 던지느냐에 따라서 함수가 어떻게 실행될지에 대한 방법?을 결정하는 것이라고 보면 된다.

여기서 잠깐,
인자와 인수의 차이에 대해서 잠시 알아보자

var a = 1;
var func = function(b) { // parameter, formal parameter, 매개변수, 인자
  ...
};

func(a); // arguments, actual parameter, 인수
  • 인자(Parameter) = 매개변수 = 가인수(Dummy argument)

    • 함수에 제공되는 데이터를 가리키는 변수
    • 인수를 담는 변수
    • parameter는 함수 선언부에 정의
  • 인수(Argument) = 전달인자

    • 함수 호출 시 전달되는 값
    • arguments는 함수 호출부에서 사용

🤔call by value

	var a = 1;
	var func = function(b) { // callee
	  b = b + 1;
	}
	func(a); // caller
	console.log(a); // 1
  1. arguments로 값이 넘어온다.
  2. 값이 넘어올 때 복사된 값이 넘어온다.
  3. caller(호출하는 녀석)가 인자를 복사해서 넘겨줬으므로 callee(호출당한 녀석)에서 해당 인자를 지지고 볶아도 caller는 영향을 받지 않는다.

🤗call by reference

var a = {};
var func = function(b) { // callee
  b.a = 1;
}
func(a); // caller
console.log(a.a); // 1
  1. arguments로 reference(값에 대한 참조 주소, 메모리 주소를 담고있는 변수)를 넘겨준다.
  2. reference를 넘기다 보니 해당 reference가 가리기는 값을 복사하지는 않는다.
  3. caller(호출하는 녀석)가 인자를 복사해서 넘기지 않았으므로 callee(호출당한 녀석)에서 해당 인자를 지지고 볶으면 caller는 영향을 받는다.
profile
drop the bit 0 and 1

0개의 댓글