November 20, 2019
JavaScript에서 변수의 전달 방법인 pass-by-value, 그리고 또다른 방법인 pass-by-reference에 대한 설명이다.
JavaScript에는 두가지 종류의 변수 타입이 있다
Primitive type의 메모리상의 값은 그것의 실제 값이다(예를 들어, boolean의 경우 true, number의 경우 42).
Primitive type은 고정된 크기의 메모리에 저장할 수 있다.
Primitive type은 scalar type 또는 simple type으로도 불린다.
Reference type은 다른 값을 포함할 수 있다.
Reference type의 내용은 고정된 크기의 메모리에 저장이 불가능하므로,
메모리 상에서의 Reference type의 값은 참조 그 자체(메모리 주소)를 담고 있다.
Reference type은 complex type 또는 container type으로도 불린다.
Copying a primitive
let a = 13
let b = a
b = 37
console.log(a) // => 13
Copying a reference
let a = { c: 13 }
let b = a
b.c = 37
console.log(a) // => { c: 37 }
문자열(string), 숫자(number), 불리언(boolean), null, undefined ➡ 값을 복사해서 넘김(pass by value)
let text = 'hello world';
function passByValue(param) {
param = 'good bye';
}
passByValue(text);
console.log(text); // 'hello world'
객체(object), 배열(array), 함수(function) ➡ 참조(주소값)을 복사해서 넘김(pass by reference)
let obj = {greeting : 'hello world'};
function passByReference(param) {
param.greeting = 'goodbye world';
}
passByReference(obj);
console.log(obj) // {greeting: "goodbye world"}
let array = ['zero', 'one', 'two', 'three', 'four'];
function passedByReference(refArray) {
refArray[1] = 'changed in function';
}
passedByReference(array);
console.log(array) // ["zero", "changed in function", "two", "three", "four", "five"]
let assignedArray = array;
assignedArray[5] = 'changed assignedArray';
console.log(array) // ["zero", "changed in function", "two", "three", "four", "changed assignedArray"]
let copyOfArray = array.slice();
copyOfArray[3] = 'changed in copyOfArray';
console.log(array) // ["zero", "changed in function", "two", "three", "four", "changed assignedArray"]