1. 클로저
클로저가 원래 switch, catch와 같은 함수 같은건 줄 알았다... 예외상황에서 바로 빠져나가게해주는..? 확실히 클로저가 뭔지 몰랐었다.
클로저는 내부 스코프가 외부 스코프의 변수를 참조할 때 외부 스코프가 종료되어도 계속 외부 스코프의 변수를 접근 가능하다는 것을 의미한다. 강의에서 계속 반복 강조해주시니 이해가 됐다
function Cat(){ let Mewo = "야옹" return function () { console.log(Mewo) } } const cat = Cat() // 외부함수는 실행끝남 cat() // 그러나 뜨는 야옹
2. 함수형 프로그래밍
예전에 JAVA를 공부했을땐 class들을 선언하고 class를 참조하며 쓰는 객체지향 프로그래밍을 했었다. JavaScript를 사용할 때 reduce, filter, map등이 있다는 것은 알았으나 이것이 함수형 프로그래밍이라는 것인지는 몰랐다.
함수형 프로그래밍은 함수(함수(데이터)) 이런식으로 사용하고 확장성, 모듈화, 재사용성, 테스트 용이성 등 많은 장점을 가지고 있다.
3. var 사용을 지양하는 이유
그전에 var는 그저 중복선언이 가능하고 요즘 잘 안쓴다는 정도...?만 알고있었다. 호이스팅이라는 것에 대해 몰랐다.
var는 호이스팅이라는 특성을 가지고 있다.
호이스팅은 함수 안에 있는 선언들을 모두 끌어올려서 해당 함수 유효 범위의 최상단에 선언하는 것을 의미한다. 선언부 위로 끌어올려지기 때문에 값 할당 전에 호출도 가능하고 아래에 선언했던 변수들을 위로 끌어올려서 실행하기때문에 추후에 이 변수가 어디에서 선언되었는지 찾기 어려울 수 있다.
let과 const는 block 스코프이기 때문에 위와 같은 상황이 불가하고
let은 재할당은 가능하지만 중복선언은 불가하다.
const는 재할당또한 불가능하다.
질문: 데브코스에서 let보다 const를 지향하는 이유는 무엇일까?
코드를 읽는 입장에서 const를 보면 이 변수는 재할당하지 않는 변수라는 것을 보기만해도 이해가능
4. 정규표현식으로 중복문자를 셀 수 있다
알고리즘 문제를 풀다가 문자열의 중복문자열을 셀 때 늘 항상 array로 변환 후 array.reduce를 돌면서 같은 문자의 갯수를 계산하여 object 형태로 저장하는 형식으로 했었다.
const regExp = /(.)\1*/g;
하지만 저 정규표현식으로 중복문자 세는 방법이 있다는 것을 알았다...! 😲
5. Router의 동작 원리
예전에 react를 공부하면서 Router를 써봤지만 이 Route가 어떻게 동작하는지는 알지 못했다.
history API를 공부하면서 그 동작을 살짝 이해하게 되었는데 (pushState, replaceState)
<Router> 컴포넌트는 마운트 되는 순간에 props로 전달받은 history 객체의 프로퍼티인 location 객체를 자신의 지역 상태에 저장하고 props로 전달받은 history 객체를 구독하여 브러우저의 현재 URL이 변경될 때마다 자신의 지역 상태에 해당하는 location객체가 새로운 location 객체로 대체되도록 한다.
결론적으로 history API를 사용하면 화면 이동을 하지않고 브라우저 url을 바꿀 수 있다!
더욱 자세한 내용은 언젠가 배울 React 강의에서 배우도록 하자..... 😏