230306_TIL (JavaScript Koans 풀이)

PYM·2023년 3월 6일
0

Today I Learned

목록 보기
1/20
post-thumbnail

오늘부터는 TIL을 꾸준히 적어보기로 했다!
지난번 그룹회고 딥토크 시간에 TIL의 중요성이 크게 와닿았다.
공부한 이론 내용을 정리하는 것도 여러모로 중요하지만,
그보다 그 중에서도 내가 새롭게 배운 것, 헷갈렸던 것, 꼭 기억하고 넘어가야 할 것들을 정리하고, 그때 나의 느낀점을 기록해 두는 것이 현재의 나에게도, 미래의 나에게도 배운 내용을 놓치고 가는 것 없이, 더 확실하게 내 것으로 만들기 위해 매우 중요할 것 같다는 생각이 들었다. 2주는 놓쳐버렸지만... 오늘 부터 START!
(썸네일은 룸메이트가 사준 옷 입고 찍은 사진 ㅎㅎ)

🌱오늘 한 것


JavaScript Koans를 마저 풀었다.
풀면서 중요하다고 생각된 내용과, 헷갈렸던 부분들을 블로깅했다.

🌱기억해야할 것

  • js는 2개의 단계로 코드를 실행한다.
  1. 소스코드 평가 : 이때 모든 var 변수에 undefined를 할당 함
  2. 소스코드 실행 : 이때 개발자가 정의내린 변수 값을 재할당 함

letconst는 1과 2단계 사이에 TDZ 구간이 있다. 이때 변수를 호출하면 에러가 발생. 즉, 변수선언줄 이전에 그 변수를 불러오면 err!
반대로 var로 선언된 변수는 호이스팅(변수가 끌어올려 지는 현상)이 발생했기 때문에 undefined를 반환

➡ 이렇게 에러가 발생하는 편이 좋다. 즉, 호이스팅은 최대한 발생하지 않도록 하는 것이 좋다

function sayHi() {
  var phrase; // 선언은 함수 시작 시 처리됩니다.(호이스팅 일어남. 다 undefined 할당)

  alert(phrase); // undefined

  phrase = "Hello";
  //호이스팅 안 일어남 즉 실행 흐름이 해당 코드에 도달했을 때 
  //undefined할당 받았던 pharse에 "Hello"값 재할당. 
}

sayHi();

  • 함수가 함수를 리턴...? ➡ 이거 클로저 아냐? 의심하기.
    근데 그 리턴되고 있는 내부 함수가 외부 함수의 변수를 사용하고 있다..?
    ➡ 이거 좁은 의미의 클로저구나!

  • 클로저를 사용하는 이유: 변수를 안전하게 보호하기 위해서

    • 렉시컬 환경: 변수나 함수가 선언된 장소. 즉 클로저에서는 내부 함수의 렉시컬 환경은 외부환경
      ➡ 그러면 외부함수에 선언된 변수(이런 변수를 은닉되어 있다고 한다)를 만질 수 있는건, 내부함수 뿐인 것.
  • Object.assign() = 배열로 치면 slice()와 같다. 즉, 얕은 복사
    (참조자료형 안의 참조자료형까지는 복사하지 못한다. 이건 여전히 주소 참조)

  • 원본을 변경하지 않게끔 복사할려면 크게 3가지 방법:
    slice(), Object.assign(), [...arr], {...arr}(스프레드 문법)


🌱더 알아볼 것


🌱한 줄 감상

이것저것 새로운 개념을 알게되어서 좋았다. 헷갈리는 부분도 꽤 있지만, 자주자주 보면서 익히고 완전히 내 것으로 만들자! 나중에 시간 날때 다시한번 더 koans를 처음부터 풀어보는 것도 좋을 것 같다! 내일은 또 DOM 배우는데...긴장 반, 설렘 반! 파이팅이다!!

profile
목표는 "함께 일하고 싶은, 함께 일해서 좋은" Front-end 개발자

0개의 댓글