자바스크립트

자바스크립트 복습1

민ズl 2025. 12. 8. 19:02
  • 원시값과 객체의 메모리 관리
원시값 객체
- stack에 저장
- 값 자체가 복사(deep copy)
- heap에 실제 객체 데이터가 저장
- stack에는 참조(주소)만 저장
- 복사해도 주소를 공유하기 때문에 한쪽 변경하면 다른 쪽도 영향을 받음 

  • a++ 나중에 증가  |   ++a 먼저 증가

  • 중첩 삼항 연산자
const result = cond1 ? '값1' : cond2 ? '값2' : cond3 ? '값3' : '기본값';

const result = cond1
  ? '값1'
  : cond2
    ? '값2'
    : cond3
      ? '값3'
      : '기본값'; // 위와 같음

  • switch의 break의 필요 여부
// 1.기본 switch 구조
switch (value) {
  case 1:
    console.log(1);
    break;
  case 2:
    console.log(2);
    break;
  default:
    console.log('other');
}

// 2.break가 필요한 경우
case 1:
  doSomething();
  break;   // 다른 case로 넘어가지 않게 하려면 필요

// 3.break가 필요없는 경우
switch (fruit) {
  case 'apple':
  case 'pear':
    console.log('과일입니다.');
    break;
}

  • for문 사용해야 하는 상황
 // 반복 횟수가 명확하게 정해져 있을때
 for (let i = 0; i < 100; i++) { ... }

// break / continue / index 조작이 꼭 필요할 때
for (let i = 0; i < arr.length; i++) {
  if (arr[i] === target) break; // 가능
}

// 성능이 매우 중요한 로직 (알고리즘 문제 등)
for (let i = 0; i < bigArray.length; i++) { ... }

// 복잡한 인텍스 계산이 필요할 때
for (let i = 0; i < arr.length; i += 2) { ... }

// 비동기 반복을 순차적으로 처리해야 할 때
for (const x of datas) {
  await fetchSomething(x);  // 순차적으로 동작
}

  • for문 사용하지 않는게 좋은 상황
// 배열을 “변환”할 때 (map)
const doubled = arr.map(v => v * 2);

// 배열을 “필터링”할 때 (filter)
const adults = users.filter(u => u.age >= 20);

// 배열을 “하나의 값으로 축약”할 때 (reduce)
const sum = arr.reduce((a, c) => a + c, 0);

// 단순하게 배열을 순회하면서 출력만 할 때 (forEach)
arr.forEach(item => console.log(item));

// 가독성이 더 중요하고 복잡한 인덱스 조작이 필요 없을 때
for (const user of users) {
  console.log(user.name);
}

// 객체의 key/value를 순회할 때
for (const key in obj) { ... }

콜백함수란 다른함수에 인자로 전달되어, 그 함수 내부에서 호출되는 함수

function greet(name) { // greet가 콜백함수
  console.log('Hello ' + name);
}

function executeCallback(callback) { // executeCallback가 콜백을 전달받아 실행하는 함수
  callback('Alice'); // callback을 실행하는 곳
}

executeCallback(greet);