
function copy(data1, data2) { --> 복사
data1 += 10; --> 복사된 값 : d1과 관련x
data2[0] += 10; --> 복사된 주소 : d2와 같은 주소 = 같은 값 = 관련o
console.log(data1, data2[0]);
}
var d1 = 80; // number 원시 값 - 숫자, 문자 등등등등 다 - 변화x
var d2 = [80]; // array(object) 참조 - 객체 - 변화하는 값
console.log(typeof d1, typeof d2);
console.log("===== 함수 호출 이전 =====");
console.log(d1, d2[0]); // 80 80
console.log("===== 함수 호출 =====");
copy(d1, d2); // 90 90
console.log("===== 함수 호출 이후 =====");
console.log(d1, d2[0]); // 80 90
원시 타입 변수는 값을 복사하여 함수로 전달된다.
함수 내에서 변수의 값을 변경하더라도 원본 변수에는 영향을 미치지 않는다.
값이 두개가 되는 것(원본, 복사본)이므로 복사본을 수정해도 원본에는 영향을 미치지 않는 것이다.

실제 데이터를 저장하는 것이 아니라 데이터가 있는 곳의 주소를 저장하는 것이다.
즉, 복사를 할 때, 주소를 주소를 복사하는 것이기 때문에, 같은 주소를 같는 값이 두개가 되는 것이다. (원본, 복사본)
이 때는 복사본을 수정하면 그 복사본에는 값이 아닌 주소가 적혀있으므로 그 주소의 값을 쫓아가서 값을 수정한다. 따라서, 원본 변수에도 영향을 미친다.
var itemList = [
{ no: 1, todo: "두부", done: false },
{ no: 2, todo: "계란", done: false },
{ no: 3, todo: "라면", done: false },
];
// 1. 대입 연산자
var newItemList = itemList;
// 2. 전개 연산자를 이용한 복사 (얕은 복사)
var newItemList = [...itemList];
newItemList[1].done = true;
console.log(itemList, newItemList);
console.log(itemList === newItemList);
console.log(itemList[1] === newItemList[1]);
// Array.prototype.reduce(callback[, initialValue] - 있어도 되고 없어도 됨): 배열의 각 요소에 대해 콜백 함수를 실행
// ⭐️ callback(acc, currentValue, index, array) ⭐️ (누적 값, 현재 값, 인덱스, 원본 배열)
// initialValue가 주어지면 누적값의 초기값으로 사용하고
// initialValue가 주어지지 않으면 배열의 첫번째 요소가 누적값의 초기값으로 사용되고 두번째 요소부터 콜백 함수가 호출
// ⭐️ 콜백함수 + initialValue (선택)⭐️
// 배열 요소 중 홀수의 합계 구하기
var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // 1. 1이 num으로 감 = 현개 값 (currentValue)
var result = array.reduce((sum, num) => {
return sum + num;
}, 0); // 2. 0이 sum으로 감 = initialValue 존재하면 누적값의 초기값

✔️ 누적기처럼 동작!
