Ch.Covelope

Javascript <자바스크립트> call by value - reference. {콜바이벨류.콜바이레퍼런스} 본문

JavaScript

Javascript <자바스크립트> call by value - reference. {콜바이벨류.콜바이레퍼런스}

Chrysans 2021. 12. 22. 23:04
728x90
반응형

 

 

Javascript <자바스크립트> call by value - reference.

 

 

평가 전략 (evaluation strategy)

 

 

 

call by value.

  • 의미와 같이 값이 그대로 복사되는 것을 의미한다. 자바스크립트(JS)에서는 원시 데이터/원시 값의 경우 값의 복사 call by value가 발생하게 됩니다.

 

 

call by value.

var i = 1;
function somefunc(a) {    
	a = a + 1;
	return a;
}
somefunc(i);   // i의 값을 파라미터로 값만 복사해서 넘긴다. 복사된 값을 넘기기 때문에 원본은 바뀌지 않는다.
console.log(i) // 결과 1

i의 값을 함수의 인자로 파라미터로 넘길때 값을 복사해서 넘기기 때문에 원본의 값은 변하지 않는다.

 

 


 

 

call by reference.

  • call by reference 는 데이터가 있는 주소(메모리)를 참조한다(값을 복사하는 게 아님). 객체나 배열에서 call by reference가 발생하다.

 

call by reference.

var i = { num: 1 }
function somefunc(a) {
	a.num = a.num + 1;  
	return a;
}
somefunc(i); // i 의 객체를 파라미터로 넘겨서(a 자리에 {num: 1}) a의 num에 (=1) +1 을 해주고 a를 리턴한다.
             // 복사값이 아닌 참조값이므로 결과는 {num: 2}가 출력된다.

배열이나 객체는 인자값을 파라미터로 넘길 때 복사 값이 아닌 참조를 하기 때문에 원본 값에 영향을 줄 수 있다.

 

 


 

 

call by sharing.

let 나 = {
  name : '오국화'
}
function changeName(person){
  person = {name : '안희원'}
  console.log(person);
}
changeName(나);  //name : '안희원'  
console.log(나);  //name : '오국화'

여기서 '나'에 객체가 할당되고 changName에 '나'를 인자로 person에 매개변수로 넘겨준다. 그럼 객체이기 때문에 call by reference 가 작동하여 원본 값이 바뀔 거 같지만 바뀌지 않는다.  call by shraing에 의해서 동적 프로퍼티를 할당하게 되면 실제 객체의 프로퍼티 값이 바뀌지만 재할당이 되는 순간에는 다른 값을 가리킨다.

 

 

 


 

 

javascript는 call by value만 존재한다. 참조 타입을 넘기면 주소가 넘어가는 것이 아니라 주소 값을 복사한 복사본이 넘어간다.

 

 

 

 

 

이번 글을 포스팅하면 call by value와 reference는 예시를 보고 설명들을 보면서 100프로는 아니지만 이해하면서 작성하다가 sharing에서 엄청난 멘붕이 왔다... 계속 구글링 하고 찾아봐도 이해가 확실히 되는 글을 찾기가 너무 어려웠다 아직도 완전히 이해가 되지 않았지만 계속 매달려 있을 수 없어서 앞으로 차차 이해해 나가도록 하기로 했다. ㅎㅎ

 

 

 


 

 

 

 

https://github.com/chry8822

 

chry8822 - Overview

‘Keep true to the dreams of thy youth’ . chry8822 has 13 repositories available. Follow their code on GitHub.

github.com

 

 

 

 

 

728x90
반응형
Comments