[TIL] 프론트엔드 term 정리-1
Front-end React JavaScriptnext.js 브라우저가 렌더되는 순서
- 브라우저가 프론트엔드 서버에서 HTML 코드를 받아온다(css 적용안됨)
- HTML을 읽으면서 script, link태그에 있는 주소로 가서 자바스크립트 코드를 받아온다
- 프론트엔드에서 HTML 을 한번 실행하고 나서 결과적으로 브라우저로 HTML이 실행됨.
- 프론트엔드 서버에서 프리렌더링(Pre-rendering)
- 프리렌더링이 마치고 브라우저에서 차이점을 발견하는 Diffing 발생
- 이후 다른 부분을 브라우저에서 채우는 Hydration 발생
- 함수 부분은 프론트엔드 서버에서가 아니라 브라우저에서 실행됨
- alert, localStorage 등은 브라우저에만 있음.
LocalStorage vs. SessionStorage
localStorage - 브라우저를 껐다 켜도 저장된 메모리가 사라지지 않음
sessionStorage - 브라우저를 껐다 켜면 메모리가 사라짐, 리프레시는 상관없음
+) LocalStorage, SessionStorage에 저장되는 것은 string 구조를 띄어야 하므로 JSON.stringify()
를 통해 옵젝을 스트링화 시키는 것이 필요. 반대로 저장되어 있는 스트링을 옵젝/배열로 되돌리려면 JSON.parse()
사용.
Hoisting, TDZ, Closure, Scope recap
- Hoisting : 스크립트 실행 시 변수 선언부분이 최상단으로 끌어올려지는 현상
var
,function
은 접근 가능let
,const
는 접근 불가능(undefined)
- TDZ(Temporal Dead Zone) : 변수가 초기화/할당되기 전 선언 단계에서 접근할 수 없는 부분
var
,function
은undefined
로 받아와짐let
,const
는 에러 발생
- Closure : 지금 실행하고 있는 함수의 외부 함수에 저장되어 있는 값
- Scope : 변수가 어디서부터 어디까지 활용 가능한지를 나타냄
- Scope Chaining : local scope에 없으면 closure에서 변수를 찾는 것. 중괄호 안이라면 어디든 가능함.
ccc
에서 나오면tomato
가 메모리에서 삭제됨. (mark and sweep)- 클로져를 잘못 코딩하면 가장 안쪽에 있는 함수가 종료되지 않으면 그 위의 함수들도 종료가 되지 않게 됨 :
ccc
가 삭제 안 되는 경우에 상위 스코프에 있는bbb
,aaa
또한 삭제가 되지 않음.