실습 - JS 리뷰

primav·2024년 11월 13일

멋사

목록 보기
27/29
post-thumbnail

3-1 원시 타입 vs 참조 타입

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

원시 타입 - 숫자 문자 등등

원시 타입 변수는 값을 복사하여 함수로 전달된다.
함수 내에서 변수의 값을 변경하더라도 원본 변수에는 영향을 미치지 않는다.

값이 두개가 되는 것(원본, 복사본)이므로 복사본을 수정해도 원본에는 영향을 미치지 않는 것이다.

참조 타입 - 객체, 배열, 함수

실제 데이터를 저장하는 것이 아니라 데이터가 있는 곳의 주소를 저장하는 것이다.

즉, 복사를 할 때, 주소를 주소를 복사하는 것이기 때문에, 같은 주소를 같는 값이 두개가 되는 것이다. (원본, 복사본)

이 때는 복사본을 수정하면 그 복사본에는 값이 아닌 주소가 적혀있으므로 그 주소의 값을 쫓아가서 값을 수정한다. 따라서, 원본 변수에도 영향을 미친다.

3-4 얕은 복사 vs 깊은 복사

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]);

7-5 배열 메서드 - reduce

// 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 존재하면 누적값의 초기값

✔️ 누적기처럼 동작!

0개의 댓글