자바스크립트에는 Call by value 와 Call by reference라는 개념이 존재합니다.
자바스크립트에서는 기본적으로 함수의 인자 전달 방식이 Call by value 방식으로 전달하게 됩니다.
예시로 설명하면 다음과 같습니다.
Call by value
function sample(item) {
item = item + 2;
}
let a = 11;
sample(a);
console.log(a); // 11;
위 코드를 살펴보면 sample 함수에 a 값을 인자로 전달했고 sample 함수는 전달받은 인자에 2를 더했습니다.
하지만 콘솔로 a를 출력해보면 기본 값인 11이 나옵니다.
즉, 함수에 인자로 전달될 때 값 복사를 통한 방식인 Call by value 방식으로 전달하기에 원래 인자의 값에는 아무런 영향을 주지 않습니다.
그럼 인자가 객체인 경우를 알아보겠습니다.
자바스크립트에서 객체는 참조 타입입니다.
객체를 인자로 전달하게 되면 객체의 참조값이 복사되서 전달되게 됩니다.
이것 또한 예시로 설명하겠습니다.
Call by reference
function sample(obj) {
obj.value = obj.value + 2;
obj = { value : 26 }; // 새로운 객체를 참조 ( ! 원본 객체의 영향이 없습니다. )
}
let tempObj = { value : 1 };
sample(tempObj);
console.log(tempObj); // 3
위 코드를 확인해보면
분명 obj.value에 2를 더해서 출력값이 3이 나왔습니다.
그런데 sample 함수 줄에 obj에 새로운 객체를 참조하는 코드가 있습니다.
이렇게 새로운 객체를 참조하는 경우에는 원본 객체에 영향을 주지 않게 됩니다.
'프론트엔드 > JavaScript' 카테고리의 다른 글
자바스크립트 자료구조란? (0) | 2023.07.02 |
---|---|
웹브라우저의 동작원리 (0) | 2023.06.20 |
TTS 자바스크립트로 구현하기 (0) | 2023.06.13 |
구글 스프레드시트 API 조회하기 | Node.js (0) | 2023.05.15 |
자바스크립트 이진수 자릿수만큼 0 채우기 (0) | 2023.04.28 |