상태를 변경하지 않는 것
메모리에 저장된 값을 변경하는 모든 행위중에는
재할당이 이에 포함된다.
함수의 인자로 어떤 변수를 넘길 때 해당 변수가 가지고 있는 값을 그대로 복사하여 함수에게 넘겨주는 방식
기존에 str 변수가 가리키고 있는 메모리 공간에 있는 값을 함수에 인자로 넘기는 것이 아니라 그 값을 복사하여 새로운 메모리 공간에 저장하고나서 넘겨준다
function foo (s) {
return s.substring(0, 2);
};
const str = 'Hello, World!';
console.log(foo(str)) //He
console.log(str) //Hello, World!
변수가 가리키고 있는 메모리 공간의 주소를 넘기는 방식
배열을 직접 변경해버리는 것이므로, 상태가 변경되었다고 말할 수 있고, 불변성이 깨져버린 것
function bar (a) {
a.push('hi');
return a;
};
const array = [];
bar(array);
console.log(array); //[ 'hi' ]
제목 | Boolean,null,undefined,Number,String,Symbol | array Object |
---|---|---|
호출 방식 | 값에 의한 호출 | 참조에 의한 호출 |
원본 변화 | X | O |
대상 | 원시타입 | 참조타입 |
string = string.slice(0,1)
string의 필요한 값을 만든 후 string으로 재할당하여야 string에 변화된 값이 등록된다.
이것 또한 값에 의한 호출이다.
Array.push(value)
Array는 변수가 가리키고 있는 메모리 공간의 주소 를 통해 값을 추가한다.
이는 기존의 원본에 영향을 끼치는 것이므로
따로 Array = Array.push(value)
이럴 필요가 없다.