함수에 인자가 전달되는 방식
call by value : 변수의 값을 복사하여 전달
따라서 함수 안에서 값을 변경하더라도 원래 값에는 영향을 미치지 않는다.
call by reference : 변수의 참조 (주소값)을 전달 = 변수의 참조를 가르키는 포인터를 전달
함수 안에서 값을 변경하면 원래 값에 영향을 미친다.
그런데 자바스크립트는 call by value 로만 동작한다.
그러면 배열이나 객체같은 참조형 변수를 인자로 넘겨줄 때는 어떤 식으로 동작하는걸까?
Call by Value에서 객체나 배열을 함수로 전달할 때는 참조값의 복사본이 전달됩니다.
이는 복사된 참조값을 통해 객체를 변경할 수 있다는 의미지, 참조값 자체가 전달된 것이 아닙니다.
Call by Reference
에서는 값 자체 또는 참조 자체가 전달되며, 원본 값에 직접적인 영향을 미칩니다.
let obj = { a: 1 };
function modifyObject(o) {
o.a = 2; // 원래 객체의 속성 수정 -> Call by Value로 참조값의 복사본을 통해 수정됨
}
function reassignObject(o) {
o = { a: 3 }; // 새로운 객체 할당 -> Call by Value로 참조값 자체가 복사되었기 때문에 외부에 영향 없음
}
modifyObject(obj);
console.log(obj.a); // 2 (원래 객체가 수정됨)
reassignObject(obj);
console.log(obj.a); // 2 (새로운 객체 할당은 함수 내부에서만 적용됨, 외부에는 영향 없음)
함수 reasignObject에서 선언된 o = {a :3 } 은 새로운 메모리 주소를 할당받게 된다.
따라서 reasignObject가 obj 의 주소값을 전달받아 실행되더라도 영향을 미치지 않는다.
call by reference로 작동한다면 결과는 다르게 나온다
원본 객체 자체를 전달받게되므로 함수 밖에서도 영향을 미친다.
let obj = { a: 1 };
function reassignObject(o) {
o.a = 2; // 원래 객체의 속성을 변경
o = { a: 3 }; // 새로운 객체를 할당
}
reassignObject(obj);
console.log(obj.a); // 3 (Call by Reference일 경우)
ㅇ<-< 와 근데 모르겠다...
'개발 공부 일지 > JavaScript' 카테고리의 다른 글
Blob (블롭) 알아보기 (0) | 2025.01.08 |
---|---|
자바스크립트 - 콜백 함수의 첫번째 인자는 언제나 이벤트 객체 (1) | 2024.09.12 |
자바스크립트 - 배열 메서드 ( 변형 ) (0) | 2024.08.19 |
자바스크립트 - 배열 메서드 ( 순회 ) (0) | 2024.08.19 |
자바스크립트 - 배열 메서드 (0) | 2024.08.19 |