이효석
About

CH1. 리액트 개발을 위해 꼭 알아야할 자바스크립트

1.1.1 JS의 데이터 타입

  • 세미 콜론 안쓰는거 저만 불편한가요? ㅋㅋㅋㅋㅋㅋ
  • [p. 26] Symbor 은 언제 쓰일까요? 그리고 Symbor.for 로 동일한 값을 사용하면 그냥 일반 값을 쓰는 것과 무슨 차이일까요?
    • enum, 객체의 키, 상수 등에서 중복이 생길 가능성 자체를 제거
    • 프로퍼티 은닉이 가능. 단, es6 에 도입된 Object.getOwnPropertySymbols 로는 찾을 수 있음
    • 객체에 사용자 정의 메서드를 정의할 때, 중복을 막을 수 있음 + 기존 메서드와 충돌이 되는지 쉽게 확인 가능

1.1.3 자바스크립트의 또다른 비교 공식 Object.is

// polyfill
function is(x, y) {
  return (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y);
}
 
-0 === +0; // true
Object.is(-0, +0); //false
 
// (x !== 0 || 1 / x === 1 / y) 를 사용해서 구분
 
Number.NaN === NaN; // false
Object.is(Number.NaN, NaN); // true
 
// (x !== x && y !== y) 를 이용해 구분
 
NaN === 0 / 0; // false
Object.is(NaN, 0 / 0); // true
 
// (x !== x && y !== y) 를 이용해 구분
  • [p. 29] 비교식을 보고 있으면 이게 리얼루다가 제정신인 언어인가.... Object.is 의 polyfill 의 수식이 왜 저런지 이해는 가능 합니다 ㅋㅋ

1.4.1 클로저의 정의

  • MDN 정의 : 클로저는 함수와 함수가 선언된 어휘적 환경(Lexical Scope)의 조합
  • [p. 59] 클로저에 대한 MDN 정의 보고 바로 이해하신분 계시나요? ㅎㅎㅎ

1.4.2. 변수의 유효 범위, 스코프

  • [p. 61] 블록 스코프인 let, const 가 있기 이전에 var 로 편하게 코딩을 한 대신, 험난한 디버깅을 했었던 기억이 나네요

1.4.3 클로저의 활용

  • [p. 64] 그런데 요즘은 let, const 를 쓰기 때문에 전역으로 let 을 선언해서 사용하는 것이 아닌 이상 크게 걱정할 내용은 아닌듯 한데, 어떻게 생각하시나요?

1.5.3 태스크 큐와 마이크로 태스크 큐

렌더링은 언제 일어나는가?

  • [p. 77] 읽다보니 궁금해서 마이크로 태스크 큐에 들어간 작업 하나가 끝날 때마다 랜더링이 되는지, 아니면 모든 마이크로 태스크 큐가 끝난 후에 랜더링이 되는지 확인해 보았습니다.
const TIMES = 100000;
 
test.addEventListener("click", () => {
  for (let i = 0; i <= TIMES; i++) {
    queueMicrotask(() => {
      console.log("fisrt", i);
    });
  }
 
  for (let i = 0; i <= TIMES; i++) {
    queueMicrotask(() => {
      console.log("second", i);
    });
  }
 
  for (let i = 0; i <= TIMES; i++) {
    setTimeout(() => {
      test.innerHTML = i;
      console.log("MACRO");
    }, 100);
  }
});
  • 위의 코드를 통해 테스트한 결과, 콘솔에 first 100000 이 찍히고 버튼의 text 가 변경되면서 second 100000 이 찍히기 시작, 그리고 second 100000 이 찍히고 난 뒤 MACRO 가 100001 번 찍힘
  • 즉, 마이크로 태스크의 작업 하나가 끝나면 랜더링이 발생하는 것을 확인 완료
  • 사실 이게 말이 되는 부분, 하나의 마이크로 큐 태스크로 작업 마친 것(아마도 서버 통신의 응답 같은 것)을 화면에 즉시 랜더링 해야할 일이 발생 할 텐데, 이때 모든 마이크로 큐 태스크를 전부 실행 후에 랜더링이 발생하면 프로그래머가 원하는 상황과는 다른 일이 생길듯

덕타이핑

  • [p. 111] 이러한 현상을 알고는 있었지만, 실제로 이름과 히스토리를 알게되니 더 재미있긴 합니다 ㅎㅎㅎ