원시/객체 타입이 함수의 인자로 할당 받고 매개변수로 전달될 때 어떤 방식으로 전달될지를 결정하는 방식
값에 의한 호출 | 참조에 의한 호출 | |
특징 | - 인수의 복사본이 함수에 전달 (원시 값을 갖는 변수를 다른 변수에 할당하면 원시 값이 복사되어 전달 됨) - 함수 내에서 매개변수(parameter)의 값이 변경되더라도 인수의 원래 값에는 영향을 미치지 않음 |
- 인수의 참조(reference)가 함수에 전달 - 함수 내에서 매개변수의 값이 변경되면 인수의 값도 변경 |
장점 | 인수를 보호하고 예측 가능한 결과를 제공 | 인수의 값을 직접 변경할 수 있으므로 메모리 사용이 효율적 |
단점 | 큰 객체를 전달할 때 비용이 더 많이 듦 | 예상치 못한 부작용이 발생할 수 있음 |
- JS는 무조건 Call by Value 방식
- 한 번 메모리 공간에 저장한 원시 값은 변경 불가능한 값
- 우리가 바꾸는 값은? 새로운 메모리 공간에 값을 재할당하고, 변수가 참조하고 있던 메모리 주소를 변경하는 것
- 얕은 복사는 왜 이루어지는지?
정의 | 주소값이 복사되는 것 |
장점 | 같은 객체를 공유하므로 메모리를 절약하고, 빠름 *참조에 의한 호출(Call By Reference)에서 얕은 복사가 이루어 지는 이유 중 하나이기도 하다. |