0728
시간이 ㄹㅇ 넘 빠르다.......................
어제 공부한거 오늘 보면 까먹고 오늘 공부한거 내일보면 까먹고
ㅋㅋ
JS
실행 컨텍스트
자바스크립트 코드는 총 3가지 종류로 나눌 수 있음
- 글로벌 코드 (Global Execution Context, GEC)
- 함수 코드 (Function Execution Context, FEC)
- eval 코드
- 엔진이 자바스크립트 파일을 실행하기 전(코드가 런타임에 들어가기 전, 컴파일 됐을 때)에 글로벌 코드가 생성되고 함수를 호출할 때마다 함수가 생성된다.
- 자바스크립트 엔진이란 뭔가?
- 자바스크립트 코드를 해석하고 실행하는 프로그램 (V8, JavaScriptCore ...)
- 파싱 -> 컴파일 -> 실행
- 자바스크립트 호스트 환경이란 뭔가?
- 애초에 호스트 의미가 뭐임? 주인이잖슴. JS를 실행 가능하게 해주는 주인.. 자바스크립트가 실행되는 환경.
- 자바스크립트 엔진이란 뭔가?
- 실행 컨텍스트와 콜스택
- 자바스크립트 코드가 실행되면 실행 컨텍스트가 생기고 이는 콜스택에 쌓인다.
- GEC 코드는 코드가 실행되기 전에 콜스택에 쌓였다가 모든 코드가 실행된 후 마지막에 제거된다.
- 이 때 모든 코드란게 함수 코드랑 eval 코드를 다 포함하는가? ㅇㅇ
- FEC는 호출할 때 쌓이고 호출이 끝나면 제거된다.
- 아 이래서 상수는 GEC에다 선언하는게 메모리량을 줄일 수 있다고 한거구나
- 왜냐면 반복되는 값인데 함수 안에다 여러번 선언하면 함수가 호출될 때마다 해당 변수의 값을 재생성할테니까.
- 실행 컨텍스트 구성요소
- Lexical Environment
- Environment Record: 변수/ 함수 정보 저장 (let, const)
- Outer Lexical Environment Reference: 상위 스코프를 가리킴
- Variable Environment
- var가 여기에 저장됨. 지금은 대부분 Lexical에 통합
- this 바인딩
- 해당 컨텍스트에서 가리키는 값.
- Lexical Environment
- Q. Lexcial Environmnet는 왜 Lexical Environment일까
- 자바스크립트는 코드가 작성된 시점에 스코프가 결정된다.
- => 이건 모든 언어의 특징 아닌가..? 했는데 Bash shell이나 옛날 언어들은 Dynamic Scope였다고함 ㄷㄷ
- Lexical이란 "어휘적", "정적인" 이란 뜻을 갖고있음.
- 그니까 결론적으로 코드가 "어디서" 정의 됐는지가 중요한거니까 lexical이라 부르는거임.
- 자바스크립트는 코드가 작성된 시점에 스코프가 결정된다.

이벤트 루프
실행 컨텍스트는 콜스택에 쌓이고
콜백함수는 큐에 저장하고
힙에는 동적 메모리를 저장한다
콜 스택에 실행할 코드(Execution Context)가 있으면 실행하고
콜 스택이 비어있으면 Callback Queue에 있는 콜백함수를 하나씩 꺼내서 콜스택에 넣어서 실행하는 과정을 반복
자세한건 0704 til
호이스팅
함수를 선언하기도 전에 호출을 하고, 그 뒤에 함수를 선언해도 알아서 해당 함수를 호출해줌.
왜? 자바스크립트 인터프리터가 코드를 실행하기 전에 선언을 먼저 처리하는 구조를 갖고 있기 때문에 코드가 상단으로 끌어올려진 것처럼 보이는 현상이 발생
왜 이렇게 만든걸까?
ㅋㅋㅋ이게 어떤 문제를 불러올까?
- 함수 선언문과 표현식 혼동
- 선언문은 전체가 호이스팅돼서 선언 전에 호출 가능
- 표현식은 변수 선언만 호이스팅되고 값은 undefined라 실행 불가
- let, const는 TDZ(Temporal == 일시적인 Dead Zone)를 갖고 있기 때문에
- 호이스팅은 되지만 초기화 전엔 접근 불가 → ReferenceError 발생
- var도 호이스팅되지만, 선언과 동시에 undefined로 초기화되기 때문에
- 초기화 전에도 접근 가능 (이 때 값은 undefined)
- 코드가 짧으면 상관없겠지만, 길고 복잡한 코드에서 이런 문제가 발생하면 디버깅이 어려워짐
- 그래서 가급적 var 대신 let과 const를 사용하는 게 좋음
- 함수 선언문과 표현식 혼동
참고 자료
- 실행 컨텍스트
- 호이스팅
- cf.) windows에서 실행 파일 확장자 EXE의 어원은 Execution에서 옴