오늘은 scope와 hoisting에 대해 배웠다.
scope는 변수를 참조할 수 있는 유효한 범위를 의미한다.
메모리의 절약과 성능 향상을 위해, 변수는 꼭 필요한 곳에서만 정의해야 한다.
전역 스코프에 변수를 정의하는 경우, 사용하지 않더라도 메모리에서 자동 삭제되지 않는다.
또, G.C.(garbage cleaner)가 메모리를 모니터링하면서 자동으로 사용하지 않는 object를 삭제하지만, g.c.또한 cpu 메모리를 먹으며 작동한다.
여기에 더해, 각각의 코드 블럭은 lexical 환경을 가지고 있으며, 실행 컨택스트 스택에 각각의 블럭이 쌓였다가 지워지기 때문에, 이 때문에 메모리 절약 뿐 아니라 성능향상을 위해서라도 변수를 꼭 필요한 곳에서만 정의해야 한다.
다음은 hoisting이다.
호이스팅은 자바스크립트 엔진이 코드를 실행하기 전에, 변수,함수, 클래스의 선언문을 끌어올려주는 것을 말한다.
이때, 변수의 선언만 코드의 최상단으로 옮겨주기 때문에, 초기화는 되지 않는다는 점을 주의해야 한다.
1. 함수의 호이스팅은 함수의 선언문 전에 호출이 가능
2. 변수와 클래스는 선언문만 호이스팅이 되고, 초기화가 되지 않기 때문에, 초기화 전 변수에 접근하면 컴파일(빌드)에러가 발상한다.
이 외에도, var의 사용을 왜 더이상 하지 않는지, 그리고 react와 같은 프레임워크 사용시에 자동 설정되는 strict mode 등에 대한 자세한 내용을 다루어 보았다.
자세한 공부 내용은 아래 링크를 참고.
노션노트 - scope & hoisting_all
'TIL(today i learned)' 카테고리의 다른 글
[JS] Closures (0) | 2022.04.14 |
---|---|
[JS] Prototype (0) | 2022.04.14 |
[JS] 비동기 Async (0) | 2022.04.13 |
[JS] 주석, 에러처리, 모듈 (0) | 2022.04.13 |
[JS] more operators (0) | 2022.04.12 |